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

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

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

      .NET Core依賴注入集成Dynamic Proxy

      在《Castle DynamicProxy基本用法》中介紹了如何將DP與Autofac集成使用,而 .NET Core有自己的依賴注入容器,在不依賴第三方容器的基礎上,如何實現動態代理就成了一個問題。

      .NET Core依賴注入實現動態代理

      我們知道,要創建一個代理對象,需要簡單的三步:

      • 創建Target
      • 創建Interceptor
      • 使用Target和Interceptor創建代理對象

      .NET Core的依賴注入允許我們自定義ServiceDescriptor對象,而在ServiceDescriptor對象中,我們可以定義對象實例化的過程,這個過程叫做factory,通過自定義factory,我們可以類型的動態代理的創建。

      代碼如下:

      services.AddTransient<LoggingInterceptor>();
      services.AddTransient<SampleService>();
      
      services.AddTransient<ISampleService>(provider =>
      {
          var target = provider.GetService<SampleService>();
          var loggingInterceptor = provider.GetService<LoggingInterceptor>();
          var proxy = DynamicProxyExtensions.Generator.CreateInterfaceProxyWithTarget<ISampleService>(target, loggingInterceptor);
      
          return proxy;
      });
      

      或者通過實例化ServiceDescriptor的方式進行注入:

      services.AddTransient<LoggingInterceptor>();
      services.AddTransient<SampleService>();
      
      Func<IServiceProvider, object> factory = (provider) => {
          var target = provider.GetService<SampleService>();
          var loggingInterceptor = provider.GetService<LoggingInterceptor>();
          var auditInterceptor = provider.GetService<AuditInterceptor>().ToInterceptor();
          var proxy = DynamicProxyExtensions.Generator.CreateInterfaceProxyWithTarget<ISampleService>(target, loggingInterceptor, auditInterceptor);
      
          return proxy;
      };
      var serviceDescriptor = new ServiceDescriptor(typeof(ISampleService), factory, ServiceLifetime.Transient);
      
      services.Add(serviceDescriptor);
      

      通過這種方式,我們可以將動態代理與依賴注入結合起來。但是這樣的代碼缺少封裝,開發效率偏低,在使用過程中還需要對依賴注入、動態代理都有一定了解,為了解決這些問題,我們需要再次封裝。

      依賴注入與動態代理的簡單封裝

      public static class DependencyInjectionExtensions
      {
          public static IServiceCollection AddService<TService, TImplementation>(this IServiceCollection services,
              ServiceLifetime lifetime, params Type[] interceptorTypes)
          {
              return services.AddService(typeof(TService), typeof(TImplementation), lifetime, interceptorTypes);
          }
      
          public static IServiceCollection AddService(this IServiceCollection services, Type serviceType, Type implType,
              ServiceLifetime lifetime, params Type[] interceptorTypes)
          {
              services.Add(new ServiceDescriptor(implType, implType, lifetime));
              
              Func<IServiceProvider, object> factory = (provider) =>
              {
                  var target = provider.GetService(implType);
      
                  List<IInterceptor> interceptors = interceptorTypes.ToList().ConvertAll<IInterceptor>(interceptorType =>
                  {
                      return provider.GetService(interceptorType) as IInterceptor;
                  });
      
                  var proxy = DynamicProxyExtensions.Generator.CreateInterfaceProxyWithTarget(serviceType, target, interceptors.ToArray());
      
                  return proxy;
              };
              var serviceDescriptor = new ServiceDescriptor(serviceType, factory, lifetime);
              services.Add(serviceDescriptor);
      
              return services;
          }
      }
      

      在使用時需要注意,一定要先將Interceptor類注入到容器中。

      posted @ 2019-07-26 21:51  拓荒者IT  閱讀(4187)  評論(3)    收藏  舉報
      皮膚配置 參考地址:https://www.yuque.com/awescnb/user
      主站蜘蛛池模板: 亚洲永久一区二区三区在线| 老师破女学生处特级毛ooo片| 福利视频在线一区二区| 亚洲中文字幕精品第三区| 99精品热在线在线观看视 | 亚洲精品美女一区二区| 国产乱子伦一区二区三区四区五区 | 宁乡县| 成人一区二区三区久久精品| 国产在线精彩自拍视频| 久久这里都是精品二| 9191国语精品高清在线| 精品国偷自产在线视频99| 天堂va蜜桃一区二区三区| 亚洲熟妇色xxxxx亚洲| 在线观看免费人成视频色| 国产日韩精品中文字幕| 亚洲理论在线A中文字幕| 尤物yw193无码点击进入| 国产精品毛片av999999| 日韩深夜福利视频在线观看| 日本三级香港三级三级人!妇久| 国产亚洲一区二区三不卡| 亚洲欧美自偷自拍视频图片| 中文字幕乱码无码人妻系列蜜桃| 久久亚洲日本激情战少妇| 午夜免费无码福利视频麻豆| 内射毛片内射国产夫妻| 乱女乱妇熟女熟妇综合网| 久久精品岛国AV一区二区无码| 柳江县| 欧美人成精品网站播放| 99人体免费视频| 99久久亚洲综合精品成人网| 国产美女免费永久无遮挡| 亚洲VA久久久噜噜噜久久无码| 中文字幕人妻精品在线| 国内熟女中文字幕第一页| 亚洲高清国产拍精品熟女| 日本中文一区二区三区亚洲| 粉嫩蜜臀av一区二区绯色|