Autofac 的简单配置

Autofac 的简单配置

注:博主自己学习构建项目的简单配置,博主小白不会太高深的

Autofac 的简单配置_第1张图片
对于Auto我就不介绍了网上多的是

Auto下载及安装图解


Autofac 的简单配置_第2张图片
Autofac 的简单配置_第3张图片


Global.asax.cs添加一行配置代码


//控制反转,依赖注入配置
AutoFacConfig.Register();

AutoFacConfig配置代码

新建一个配置autofac的静态类,这样方便管理不乱

namespace MyMvc.App_Start
{
    public static class AutoFacConfig
    {
        public static void Register()
        {
            //构造一个AutoFac的builder容器  
            ContainerBuilder builder = new Autofac.ContainerBuilder();
            //从当前运行的bin目录下加载程序集  
            Assembly controllers = Assembly.Load("MyMvc");
            builder.RegisterControllers(controllers);
            SetDepend(builder);
            //创建一个真正的AutoFac的工作容器  
            var container = builder.Build();
            //移除原本的mvc的容器使用AutoFac的容器
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

        /// 
        /// 依赖加载
        /// 
        public static void SetDepend(ContainerBuilder builder)
        {
            //为什么要加载这两个DLL文件
            //凡是被接口引用方法的类库都要进行反射,对于common、model等不被接口引用到方法的则不需要
            //加载数据处理层程序集。  
            Assembly MyDAL = Assembly.Load("MyDAL");
            //反射获取类型
            Type[] type1 = MyDAL.GetTypes();
            //以接口形式保存被创建类的对象实例
            builder.RegisterTypes(type1)
                .AsImplementedInterfaces();

            //加载业务逻辑层这个程序集。  
            Assembly MyBLL = Assembly.Load("MyBLL");
            //获取dll中所有的类
            Type[] type2 = MyBLL.GetTypes(); 
            //以接口形式保存被创建类的对象实例
            builder.RegisterTypes(type2)
                .AsImplementedInterfaces();

        } 
    }
}

Autofac 的简单示例

注意:接口一定要有实现类,否则报错

构造函数注入

个人理解示意图,可能是错误的,如果错误还请指出,个人是小白一个


Autofac 的简单配置_第4张图片


namespace MyBLL
{
    public class BaseServices
    {
        //创建接口对象,接口必须有实现类
        public IBaseDal dal;
        public BaseServices(IBaseDal _dal)
        {
            //由Autofac实现依赖注入,自动为接口创建对象(BaseDal类)
            dal = _dal;
        }
        public int GetSum(int num1,int num2)
        {
            int result = dal.GetSum(num1,num2);
            return result;
        }
    }
}
namespace MyIDAL
{
    public interface IBaseDal
    {
        int GetSum(int num1,int num2);
    }
}
namespace MyDAL
{
    public class BaseDal:IBaseDal
    {
        public int GetSum(int num1, int num2)
        {
            return num1 + num2;
        }
    }
}

你可能感兴趣的:(Autofac 的简单配置)