1. 程式人生 > >Autofac--手動依賴註入

Autofac--手動依賴註入

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--手動依賴註入