Autofac Net 最新整理

方案1 MVC+三层架构

1,新建三层架构(BLL,DAL,UI)
2,在DAL 及 BLL 中均使用接口Interface及实现Realization
3,在BLL 中的类中,使用构造函数 如类名SysUser,均使用接口进行传值

 public DataAccessLayer.Interface.ISysUser dal;
 public SysUser(DataAccessLayer.Interface.ISysUser sysUser)
 {
     dal = sysUser;
 }

4,在方法中,可直接使用dal 进行方法的调用
5,类似于BLL 层的调用方式,在Contrallor 中,也是需要调用BLL层的接口进行调用

BusinessLogicLayer.Interface.ISysUser _sysUser;
public HomeController(BusinessLogicLayer.Interface.ISysUser sysUser)
{
    _sysUser = sysUser;
}

6,这时候如果直接调式MVC 项目,项目会报错,提示控制器没有无参构造

以下重点

7,在MVC 项目中调用Nuget 进行安装autofac ,包括(autofac,Mvc5=>会引用 Autofac.Integration.Mvc)
8,在MVC 下 App_Start 文件夹内新建 AutoFacConfig.cs ,内容如下:

using Autofac;
using Autofac.Integration.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Mvc;

namespace Dean.WebMVC
{
    public class AutoFacConfig
    {       
        public static void Register()
        {
            //配置 Autofac 基本信息
            //创建容器
            ContainerBuilder builder = new ContainerBuilder();
            //第一种方法 使用构造依赖注入
            //builder.RegisterType<Domain.BusinessLogicLayer.Realization.SysUser>().As<Domain.BusinessLogicLayer.Interface.ISysUser>();
            //builder.RegisterType<Domain.DataAccessLayer.Realization.SysUser>().As<Domain.DataAccessLayer.Interface.ISysUser>();
            //第二种方法 使用反射注入 实现直接配置程序集
            Assembly dal = Assembly.Load("Dean.DataAccessLayer");//通过反射找到对应的dal成功
            builder.RegisterAssemblyTypes(dal).AsImplementedInterfaces();//通过容器注射反射等得到类型,并且与接口层进行关联
            Assembly bll = Assembly.Load("Dean.BusinessLogicLayer");//通过反射找到对应的dal成功
            builder.RegisterAssemblyTypes(bll).AsImplementedInterfaces();//通过容器注射反射等得到类型,并且与接口层进行关联
            //注册控制器
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            //构建
            Autofac.IContainer container = builder.Build();
            //实现
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }
}

9,说明。有五个步骤:

  1. 创建容器
  2. 依赖注入
    第一种方法适合类较少的应用,可针对性的进行配置。
    第二种方法适合类多的,比较快速方便的整理,建议使用。
//第一个参数是实现类,后面是的接口
builder.RegisterType<Domain.BusinessLogicLayer.Realization.SysUser>()
.As<Domain.BusinessLogicLayer.Interface.ISysUser>();
//第一个参数是实现类,后面是的接口
builder.RegisterType<Domain.DataAccessLayer.Realization.SysUser>()
.As<Domain.DataAccessLayer.Interface.ISysUser>();
//第二种方法 使用反射注入 实现直接配置程序集
//通过反射找到对应的dal成功
Assembly dal = Assembly.Load("Dean.DataAccessLayer");
//通过容器注射反射等得到类型,并且与接口层进行关联
builder.RegisterAssemblyTypes(dal).AsImplementedInterfaces();
//通过反射找到对应的bll成功
Assembly bll = Assembly.Load("Dean.BusinessLogicLayer");
//通过容器注射反射等得到类型,并且与接口层进行关联
builder.RegisterAssemblyTypes(bll).AsImplementedInterfaces();
  1. 注册控制器
  2. 构建
  3. 实现

10,保存好文件,打开MVC 下的 Global.asax 进行注册,这里重要,如果不注册,则无法生效。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace Dean.WebMVC
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

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

方案2 WebAPI + Domain

后面发现其实这个方法是可以运用到WEBAPI+MVC 的,
只是引用的dll 不同,引用完之后使用同样的方法将数据

  • 引用 Autofac
  • 引用 Autofac.Mvc4 or 5
  • 引用 Autofac.WebApi2
using Autofac;
using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi;
using System;
using System.Reflection;
using System.Web.Http;
using System.Web.Mvc;
private static IContainer _container;

/// <summary>
/// 
/// </summary>
public static void Register()
{
   #region AutoFac IOC容器
   try
   {
       //配置 Autofac 基本信息
       //创建容器
       ContainerBuilder builder = new ContainerBuilder();

//配置程序集
       Assembly Repository = Assembly.Load("Dean.WebApi.Repository");//通过反射找到对应的 Repository 成功
       builder.RegisterAssemblyTypes(Repository).AsImplementedInterfaces();//通过容器注射反射等得到类型,并且与接口层进行关联              

       //注册控制器
       builder.RegisterControllers(Assembly.GetExecutingAssembly());
       builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
       //构建
       //Autofac.IContainer _container = builder.Build();
       _container = builder.Build();

       //设置MVC依赖注入
       DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));

       //设置WebApi依赖注入
       GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(_container);
      
   }
   catch (Exception ex)
   {
       throw new Exception(ex.Message + "\n" + ex.InnerException);
   }
   #endregion
}

同样在 Global.asax Application_Start 做配置注册

方案3 WebFrom + 三层架构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值