期货大赛项目|三,autofac简单用法
Posted tanfuchao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了期货大赛项目|三,autofac简单用法相关的知识,希望对你有一定的参考价值。
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>();
以上是关于期货大赛项目|三,autofac简单用法的主要内容,如果未能解决你的问题,请参考以下文章
net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)三引入Autofac Ioc容器
net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)三引入Autofac Ioc容器
net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)三引入Autofac Ioc容器