期货大赛项目|三,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();
        }
    }
}
View Code

在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容器

Using AutoFac

Autofac和nopcommerce中的Autofac, 还有反射

IOC容器-Autofac在MVC中实现json方式注入使用