NET Core 整合Autofac和Castle

來源:互聯網
上載者:User

標籤:

NET Core 整合Autofac和Castle

閱讀目錄

  • 前言:
  • 1.ASP.NET Core中的Autofac
  • 2.整合Castle的DynamicProxy
  • 3.注意事項
回到目錄前言:

除了ASP.NETCore內建的IOC容器外,我們還可以使用其他成熟的DI架構,如Autofac,StructureMap等(筆者只用過Unity,Ninject和Castle)。

回到目錄1.ASP.NET Core中的Autofac

首先在Project.json的Dependency節點為中添加如下引用:

  1. "Microsoft.Extensions.DependencyInjection": "1.0.0",
  2. "Autofac": "4.1.1",
  3. "Autofac.Extensions.DependencyInjection": "4.0.0",

接著我們也修改Startup檔案中的ConfigureServices方法,為了接管預設的DI,我們要為函數添加傳回值AutofacServiceProvider;

1.1 ConfigureServices函數
  1. public IServiceProvider ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddApplicationInsightsTelemetry(Configuration);
  4. services.AddMvc();
  5. return RegisterAutofac(services);
  6. }
1.2 RegisterAutofac函數
  1. private IServiceProvider RegisterAutofac(IServiceCollection services)
  2. {
  3. var builder = new ContainerBuilder();
  4. builder.Populate(services);
  5. var assembly = this.GetType().GetTypeInfo().Assembly;
  6. builder.RegisterType<AopInterceptor>();
  7. builder.RegisterAssemblyTypes(assembly)
  8. .Where(type =>
  9. typeof(IDependency).IsAssignableFrom(type) && !type.GetTypeInfo().IsAbstract)
  10. .AsImplementedInterfaces()
  11. .InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AopInterceptor));
  12. this.ApplicationContainer = builder.Build();
  13. return new AutofacServiceProvider(this.ApplicationContainer);
  14. }

這裡IDependency介面是一個空介面,為了掃描到實現這個介面的類,自動完成注入操作。

回到目錄2.整合Castle的DynamicProxy

要實現整合,只需要上面函數中,這段代碼:

  1. .EnableInterfaceInterceptors().InterceptedBy(typeof(AopInterceptor));
2.2 引用程式集

顯然些程式集還沒有Core的對應版本的Autofac.Extras.DynamicProxy,既然說好要整合,就修改一下原始碼吧。

Autofac.Extras.DynamicProxy之所以不能支援Core,主要是因為在源碼中沒有使用新的反射API,GetTypeInfo或使用了一些Remoting的API導致的。

支援Core的Autofac.Extras.DynamicProxy原始碼內容和Demo的Github地址如下:

https://github.com/maxzhang1985/AutofacCastle.AspNetCore.Demo

回到目錄3.注意事項

(1).建立Autofac容器時不要忘了將ConfigureServices的傳回值修改為IServiceProvider。
(2).對應ASP.NET Core提及的不同的生命週期,Autofac也定義了對應的擴充方法,如InstancePerLifetimeScope等,預設為Transient模式,包括EntityFramwork等Context也是該種模式。
(3).Autofac Core不支援從View中注入,但是可以和ASP.NET Core內建IOC容器配合使用。

 

 

GitHub:https://github.com/maxzhang1985/YOYOFx  如果覺還可以請Star下, 歡迎一起交流。

 

.NET Core 和 YOYOFx 的交流群: 214741894  

 

如果你覺得本文對你有協助,請點擊“推薦”,謝謝.

 


  1. 如果您覺得閱讀本文對您有協助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,但是未經作者本人同意,轉載文章之後必須在文章頁面明顯位置給出作者和原文串連,否則保留追究法律責任的權利。
 分類: .NET Core

NET Core 整合Autofac和Castle

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.