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--手动依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

依赖注入之Autofac使用总结

依赖注入之AutoFac

Autofac 依赖注入框架

WebAPI2使用AutoFac依赖注入完整解决方案。

AutoFac实现程序集级别的依赖注入

ASP.NETCore使用AutoFac依赖注入