码迷,mamicode.com
首页 > 其他好文 > 详细

期货大赛项目|三,autofac简单用法

时间:2018-06-21 14:44:29      阅读:184      评论:0      收藏:0      [点我收藏+]

标签: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();
        }
    }
}
View Code

在Initialise中,以规定的格式,配置出类与接口的映射

这样,在我们想引用一个dal的时候,我们就可以这样写

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

 

期货大赛项目|三,autofac简单用法

标签:initial   return   gis   hide   cto   容器   就是   containe   readonly   

原文地址:https://www.cnblogs.com/tanfuchao/p/9208849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!