這幾天在學習Asp.Net 5,現在文檔以及博客之類的資料實在太少了,不看源碼幾乎舉步維艱,好在全都是開源的,看看微軟的代碼也獲益良多。
看到DependencyInjection的代碼里除了默認的容器之外,還提供了對NInject, Castle, Unity, AutoFac等第三方IoC容器的支持,但看了半天愣是沒找到怎么使用。連翻代碼帶查資料,好不容易才搞明白了。
在Microsoft.AspNet.Hosting.HostingEngine的EnsureapplicationServices方法里,會調用Startup.ConfigureServices方法,并接收其返回值,在默認生成的Asp.Net項目里,這個方法的返回值類型是void,但是實際上這個返回值類型可以是IServicePRovider類型。如果返回的不是IServiceProvider,則會創建一個默認的IServiceProvider實例,即默認的ServiceProvider類型;如果返回的是IServiceProvider類型,則將這個實例作為程序的IoC對外接口。
所以問題簡單了,使用自定義容器實際上就是在ConfigureServices方法里返回一個實現了IServiceProvider類型的對象,而微軟已經為我們封裝了好幾個了。不過目前貌似除了AutoFac,其它的還只支持普通的Framework。
代碼如下
public IServiceProvider ConfigureServices(IServiceCollection services){ services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings")); services.AddMvc(); var builder = new ContainerBuilder(); AutofacRegistration.Populate(builder, services); var container = builder.Build(); return container.Resolve<IServiceProvider>();}
新聞熱點
疑難解答