Autofac--手动依赖注入
Posted liubaojing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Autofac--手动依赖注入相关的知识,希望对你有一定的参考价值。
本文只适合初步接触 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--手动依赖注入的主要内容,如果未能解决你的问题,请参考以下文章