AutoFac實現程式集級別的依賴注入
阿新 • • 發佈:2019-01-29
1.在“工具”->“NuGet包管理器”->"程式包管理器控制檯"執行一下程式碼,安裝autofac。
Install-Package Autofac
當使用 autoFac 開發ASP .net 遇到 ContainerBuilder() 不包含RegisterControllers 方法解決方案(MVC環境下,注入Controller需要安裝包)
Install-Package Autofac.Mvc5 -Version 4.0.2
當然也可以在專案點選右鍵點選“管理NuGet程式包 ”,在NuGet管理包頁面,搜尋AutoFac,進行下載安裝。
2.using AutoFac;
using AutoFac.Intergation.MVC;
3.依賴注入配置程式碼(Golbal.asax的Application_Start方法中新增一下程式碼)
/// <summary> /// 使用AutoFac實現依賴注入 /// </summary> private void autoFac() { var builder = new ContainerBuilder(); SetupResolveRules(builder); //注入 builder.RegisterControllers(Assembly.GetExecutingAssembly()); //注入所有Controller var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
private void SetupResolveRules(ContainerBuilder builder) { //UI專案只用引用service和repository的介面,不用引用實現的dll。 //如需載入實現的程式集,將dll拷貝到bin目錄下即可,不用引用dll var IServices = Assembly.Load("MyMVC3.Business.IServices"); var Services = Assembly.Load("MyMVC3.Business.Services"); var IRepository = Assembly.Load("MyMVC3.Modules.IRepository"); var Repository = Assembly.Load("MyMVC3.Modules.Repository"); //根據名稱約定(服務層的介面和實現均以Service結尾),實現服務介面和服務實現的依賴 builder.RegisterAssemblyTypes(IServices, Services) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces(); //根據名稱約定(資料訪問層的介面和實現均以Repository結尾),實現資料訪問介面和資料訪問實現的依賴 builder.RegisterAssemblyTypes(IRepository, Repository) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces(); }
4.各層之間注入程式碼
private IUserInfoRepository productRepository;
public UserInfoService(IUserInfoRepository productRepository)
{
this.productRepository = productRepository;
this.AddDisposableObject(productRepository);
}
public IUserInfoService userService;
public HomeController(IUserInfoService userService)
{
this.userService = userService;
this.AddDisposableObject(userService);
}