<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .Net Core 通過依賴注入和動態(tài)加載程序集實現(xiàn)宿主程序和接口實現(xiàn)類庫完全解構(gòu)

      網(wǎng)上很多.Net Core依賴注入的例子代碼,例如再宿主程序中要這樣寫:

      services.AddTransient<Interface1, Class1>();

      其中Interface1是接口,Class1是接口的實現(xiàn)類,一般我們會將接口項目和實現(xiàn)類項目分開成兩個項目以實現(xiàn)解耦。

      但這段代碼卻要求宿主程序要引用實現(xiàn)類項目,所以這里的解構(gòu)實現(xiàn)的并不徹底,要完全解耦就是要實現(xiàn)宿主程序不引用實現(xiàn)類項目。
      或者把注入的代碼改成這樣:

       services.Add(new ServiceDescriptor(serviceType: typeof(Interface1),
                                                implementationType: Type.GetType("ClassLibrary1.Class1, ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"),
                                                lifetime: ServiceLifetime.Transient));

      其實這段代碼也要求宿主類引用實現(xiàn)類庫項目,不然運行會出錯,只有采用動態(tài)加載程序集的方式才能實現(xiàn)宿主程序不引用實現(xiàn)類:

       var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(@"C:\Users\pesu\source\repos\DynamicLoadDependencyInjectionConsoleApp\ClassLibrary1\bin\Debug\netcoreapp2.0\ClassLibrary1.dll");

      上面代碼將實現(xiàn)類庫程序集動態(tài)加載到宿主程序,然后將注入的代碼改成這樣:

        services.Add(new ServiceDescriptor(serviceType: typeof(Interface1),
                                                implementationType: myAssembly.GetType("ClassLibrary1.Class1"),
                                                lifetime: ServiceLifetime.Transient));

      其中ClassLibrary1.Class1是Interface1的實現(xiàn)類,完整代碼如下:

      using InterfaceLibrary;
      using Microsoft.Extensions.DependencyInjection;
      using Microsoft.Extensions.Logging;
      using System;
      using System.Runtime.Loader;
      
      namespace ConsoleApp1
      {
          class Program
          {
              static void Main(string[] args)
              {
                  var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(@"C:\Users\pesu\source\repos\DynamicLoadDependencyInjectionConsoleApp\ClassLibrary1\bin\Debug\netcoreapp2.0\ClassLibrary1.dll");
               
                  IServiceCollection services = new ServiceCollection();
                  //注入
                  services.AddTransient<ILoggerFactory, LoggerFactory>();
                 
                  services.Add(new ServiceDescriptor(serviceType: typeof(Interface1),
                                                implementationType: myAssembly.GetType("ClassLibrary1.Class1"),
                                                lifetime: ServiceLifetime.Transient));
      
                  //構(gòu)建容器
                  IServiceProvider serviceProvider = services.BuildServiceProvider();
                  //解析
                  serviceProvider.GetService<ILoggerFactory>().AddConsole(LogLevel.Debug);
                  var cls = serviceProvider.GetService<Interface1>();
                  cls.Say();
                  Console.ReadKey();
              }
          }
      }

      輸出:


      這有什么用呢?

      posted on 2018-04-17 11:57  小莊  閱讀(1609)  評論(1)    收藏  舉報

      主站蜘蛛池模板: 日韩在线视频线观看一区| 97视频精品全国免费观看| 高清中文字幕国产精品| 国产精品中文一区二区| 欧美精品一产区二产区| 国产精品制服丝袜白丝| 欧美视频二区欧美影视| 欧美成人aaa片一区国产精品| 商城县| 一区二区三区在线色视频| 日本一区二区三区有码视频| 国产精品流白浆无遮挡| 成年女人免费碰碰视频| 国产成人精品无人区一区| 翘臀少妇被扒开屁股日出水爆乳| 波多野结衣一区二区三区高清| 免费国产拍久久受拍久久| 男人天堂亚洲天堂女人天堂| 国产国产乱老熟女视频网站97| 永久免费av网站可以直接看的| 98精品全国免费观看视频| 欧美啪啪网| 艳妇乳肉豪妇荡乳在线观看| 亚洲五月丁香综合视频| 欧美国产日产一区二区| 亚洲乱妇老熟女爽到高潮的片 | 久久国产精品老女人| 18国产午夜福利一二区| 97精品久久九九中文字幕| 国产精品久久久久7777| 日韩狼人精品在线观看| 国色精品卡一卡2卡3卡4卡在线 | 色偷偷亚洲女人天堂观看| 国产精品成人免费视频网站京东| 丰满人妻一区二区三区无码AV| 久久综合激情网| 特黄三级又爽又粗又大| 日韩精品中文字幕有码| 亚洲av成人无网码天堂| 国产品精品久久久久中文| 美女爽到高潮嗷嗷嗷叫免费网站|