1. 程式人生 > >期貨大賽項目|三,autofac簡單用法

期貨大賽項目|三,autofac簡單用法

autofac row auto exce void system 新建 splay 師說

autofac是依賴註入

我們以前要引入一個dal層,是這麽寫的

private IDal _dao = new Dal()

我們可以看得出,這樣寫,我們的bll層不光依賴了接口IDal,還依賴了Dal

記得老師說過,層與層直接的依賴,都依賴於接口,也就是只依賴IDal就夠了,這樣並不是一個最終的解決方案

這裏可以用抽象工廠,讓工廠為我們創建出一個實現了IDal接口的類,autofac就是這樣一個工廠

創建FuturesContest.DAL.Container層

新建一個Container類

技術分享圖片
using System;
using Autofac;
using FuturesContest.IDAL;

namespace FuturesContest.DAL.Container { public class Container { /// <summary> /// IOC容器 /// </summary> public static IContainer FacContainer; /// <summary> /// 獲取IDal的實例化對象 /// </summary> /// <typeparam name="T">接口</typeparam>
/// <returns>實例化dao</returns> public static T Resolve<T>() { try { //如果容器為空,初始化 if (FacContainer == null) { Initialise(); } } catch
(Exception ex) { throw new System.Exception("IOC實例化出錯!" + ex.Message); } return FacContainer.Resolve<T>(); } /// <summary> /// 初始化容器 /// </summary> public static void Initialise() { var builder = new ContainerBuilder(); //格式builder.RegisterType<xxxDal>().As<IxxxDal>().InstancePerLifetimeScope(); builder.RegisterType<UserDal>().As<IUserDal>().InstancePerLifetimeScope(); builder.RegisterType<MenuDal>().As<IMenuDal>().InstancePerLifetimeScope(); builder.RegisterType<MienDal>().As<IMienDal>().InstancePerLifetimeScope(); builder.RegisterType<RuleDal>().As<IRuleDal>().InstancePerLifetimeScope(); builder.RegisterType<ActorDal>().As<IActorDal>().InstancePerLifetimeScope(); builder.RegisterType<PlayTimeDal>().As<IPlayTimeDal>().InstancePerLifetimeScope(); FacContainer = builder.Build(); } } }
View Code

在Initialise中,以規定的格式,配置出類與接口的映射

這樣,在我們想引用一個dal的時候,我們就可以這樣寫

        private readonly IUserDal _dao = Container.Resolve<IUserDal>();

期貨大賽項目|三,autofac簡單用法