期貨大賽項目|三,autofac簡單用法
阿新 • • 發佈:2018-06-21
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;View Codenamespace 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(); } } }
在Initialise中,以規定的格式,配置出類與接口的映射
這樣,在我們想引用一個dal的時候,我們就可以這樣寫
private readonly IUserDal _dao = Container.Resolve<IUserDal>();
期貨大賽項目|三,autofac簡單用法