zoukankan      html  css  js  c++  java
  • 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的手动注入到这就完成了。

     
     
  • 相关阅读:
    BZOJ.3884.上帝与集合的正确用法(扩展欧拉定理)
    HDU.5608.function(杜教筛)
    HDU.5628.Clarke and math(狄利克雷卷积 快速幂)
    51Nod.1244.莫比乌斯函数之和(杜教筛)
    SPOJ.Visible Lattice Points(莫比乌斯反演)
    BZOJ.2301.[HAOI2011]Problem B(莫比乌斯反演 容斥)
    BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)
    Codeforces757E.Bash Plays With Functions(积性函数 DP)
    插值法
    2、Windows下安装配置Redis
  • 原文地址:https://www.cnblogs.com/liubaojing/p/9269989.html
Copyright © 2011-2022 走看看