Autofac--手動依賴註入
阿新 • • 發佈:2018-07-05
span style resolve code int ica 文件 tor main.c
本文只適合初步接觸 autoafc 的小白,大佬勿噴。
autofac是一種很輕量的一個依賴註入容器
暫時先說一下手動註入的方式(因為使用自動註入遇到了坑,暫時先寫一下手動註入)
1.先定義接口
public interface IAccountService:IDependency { /// <summary> /// 獲取賬戶信息 /// </summary> /// <param name="accountName">賬戶名</param> /// <returns>賬戶信息</returns> AccountBases GetAccount(string accountName); }
此處的 IDependency 僅僅為一個空接口
2.接口的實現
public class AccountService : BaseService, IAccountService { public AccountBases GetAccount(string accountName) { ///實現代碼,CRUD等等 } }
3.控制器的使用
private IAccountService AcountService; ///構造函數 public LoginController(IAccountService accountService) { AcountService = accountService; } public ActionResult Login(AccountBases loginInfo) {
......... AccountBases entity= AcountService.GetAccount(loginInfo.AccountName);
.........
}
代碼中的 AcountService.GetAccount(loginInfo.AccountName) 就實現了依賴註入,傳統的寫法 為
AcountService as = new AcountService();
AccountBases entity = as.GetAccount(loginInfo.AccountName);
兩者相比較依賴註入會更方便一點,除了方便,依賴註入的作用主要是為了降低系統的耦合。
4.核心:autofac,要使用autofac就得先去引入他的nuget包,這裏就不說明了,不會的可以百度。
首先:新建一個類來初始化和註入實現
public class AutofacConfig { /// <summary> /// 初始化 /// </summary> public static void Initialise() { var builder = RegisterService(); DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build())); } /// <summary> /// 註入實現 /// </summary> /// <returns></returns> private static ContainerBuilder RegisterService() { var builder = new ContainerBuilder(); builder.RegisterType<AccountService>().As<IAccountService>(); builder.RegisterType<BusinessPaymentsService>().As<IBusinessPaymentsService>(); builder.RegisterType<ClearAllService>().As<IClearAllService>(); builder.RegisterType<MemberService>().As<IMemberService>(); builder.RegisterType<InInventoryDetailsService>().As<IInInventoryDetailsService>(); ////掃描IService和Service相關的程序集 var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList(); //控制器註入 builder.RegisterControllers(assemblys.ToArray()); return builder; } }
使用 builder.RegisterType 來手動註入你想註入的接口
最後在Global文件中配置就完成了
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); //autofac依賴註入 AutofacConfig.Initialise(); Database.SetInitializer<ClearContext>(null); }
autofac的手動註入到這就完成了。
Autofac--手動依賴註入