标签:initial return gis hide cto 容器 就是 containe readonly
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(); } } }
在Initialise中,以规定的格式,配置出类与接口的映射
这样,在我们想引用一个dal的时候,我们就可以这样写
private readonly IUserDal _dao = Container.Resolve<IUserDal>();
标签:initial return gis hide cto 容器 就是 containe readonly
原文地址:https://www.cnblogs.com/tanfuchao/p/9208849.html