Autofac - MVC/WebApi中的应用

参考页面:

http://www.yuanjiaocheng.net/ASPNET-CORE/asp-net-core-overview.html

http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html

http://www.yuanjiaocheng.net/ASPNET-CORE/newproject.html

http://www.yuanjiaocheng.net/webapi/web-api-gaisu.html

http://www.yuanjiaocheng.net/webapi/create-web-api-proj.html

Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用.

一、目录结构

先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL, BLL, IDAL, DAL, Helper

public interface ITestBll
{
    void Say(List<string> msg);
}

我里面都是为了实现Say方法的.

public class TestBll : ITestBll
{
    public void Say(List<string> msg)
    {
        msg.Add("进入TestBll中的方法Say");
        var dal =   IocContainer.Create<ITestDal>();
        dal.Say(msg);
    }
}

ITestDal , TestDal 和上面这两个内容其实是一样的, 只是分层不一样. 这里就不贴了.

二、实现

在Application_Start方法的末尾位置, 调用一个注册方法.

protected void MvcInit()
{
    IocContainer.RegisterMvc();

    IocContainer.RegisterWebApi();

    IocContainer.RegisterTypes(System.Reflection.Assembly.Load("BLL").GetTypes());

    IocContainer.RegisterTypes(System.Reflection.Assembly.Load("DAL").GetTypes());

    IocContainer.Build();
}

mvc, api 在asp.net中, 都是有自己的一套 ioc 方法的, 这里其实也可以不写. 不过这里就是为了在这里面的使用来说的.

在helper类库中, 对autofac具体实现, 加了一些封装.

public class IocContainer
{
    private static ContainerBuilder builder;

    private static IContainer container;

    static IocContainer()
    {
        builder = new ContainerBuilder();
    }

    #region 注册接口
    public static void RegisterTypeInstancePerLifetimeScope<T>()
    {
        builder.RegisterType<T>().InstancePerLifetimeScope();
    }
    public static void RegisterTypeInstancePerDependency<T>()
    {
        builder.RegisterType<T>().InstancePerDependency();
    }
    public static void RegisterTypeSingleInstance<T>()
    {
        builder.RegisterType<T>().SingleInstance();
    }

    /// <summary>
    /// 注册接口
    /// </summary>
    /// <typeparam name="T">实现类型</typeparam>
    /// <typeparam name="IT">接口类型</typeparam>
    public static void RegisterType<T, IT>()
    {
        builder.RegisterType<T>().As<IT>();
    }
    /// <summary>
    /// 自动装配接口
    /// </summary>
    /// <param name="types"></param>
    public static void RegisterTypes(params Type[] types)
    {
        builder.RegisterTypes(types).AsImplementedInterfaces();
    }

    public static void RegisterType<T, IT>(string name)
    {
        builder.RegisterType<T>().Named<IT>(name);
    }

    public static void RegisterType<T, IT>(int key)
    {
        builder.RegisterType<T>().Keyed<IT>(key);
    }

    #endregion

    #region Build
    public static void Build()
    {
        container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        //DependencyResolver.SetResolver(new AutofacWebApiDependencyResolver(container));
        GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    }
    #endregion

    #region 注册Mvc
    public static void RegisterMvc()
    {
        builder.RegisterControllers(Assembly.GetCallingAssembly());
    }
    #endregion

    #region 注册WebApi
    public static void RegisterWebApi()
    {
        builder.RegisterApiControllers(Assembly.GetCallingAssembly());
    }
    #endregion

    #region 创建对象
    public static T Create<T>()
    {
        return container.Resolve<T>();
    }

    public static T Create<T>(string name)
    {
        return container.ResolveNamed<T>(name);
    }

    public static T Create<T>(int key)
    {
        return container.ResolveKeyed<T>(key);
    }

    public static object Create(Type t)
    {
        return container.Resolve(t);
    }
    #endregion
}

做完上面的这些, 就可以在Controller, BLL, DAL中, 通过ioc的方式, 来获取想要获取到的类的实例

时间: 2024-10-09 20:50:01

Autofac - MVC/WebApi中的应用的相关文章

AutoFac+MVC+WebApi源码----我踩过的坑

发现网上关于AutoFac的Demo源码比较少,综合MVC和WepApi的更少.所以贴出源码 WebApi项目(MVC4不需要引用,历史遗留问题,人懒没删) 建项目 新建类库IAutoFacDal(接口),AutoFacDal,IAutoFacLogic(接口),AutoFacLogic,AutoFacDto(参数),AutoFacEntity(数据库实体) 新建WebApi AutoFacEntity User源码 1 using System; 2 using System.Collecti

ASP.NET MVC &amp; WebApi 中实现Cors来让Ajax可以跨域访问 (转载)

什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制.本文详细介绍CORS的内部机制. 一.简介 CORS需要浏览器和服务器同时支持.目前,所有浏览器都支持该功能,IE浏览器不能低于IE10. 整个CORS通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代

ASP.NET Core MVC/WebAPi 模型绑定探索

前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用到了,你再去看理论性的文章时才会豁然开朗,这是我一直以来学习技术的方法.本文我们来讲解.NET Core中的模型绑定. 话题 在ASP.NET Core之前MVC和Web APi被分开,也就说其请求管道是独立的,而在ASP.NET Core中,WebAPi和MVC的请求管道被合并在一起,当我们建立控

【转】ASP.NET Core MVC/WebAPi 模型绑定探索

前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用到了,你再去看理论性的文章时才会豁然开朗,这是我一直以来学习技术的方法.本文我们来讲解.NET Core中的模型绑定. 话题 在ASP.NET Core之前MVC和Web APi被分开,也就说其请求管道是独立的,而在ASP.NET Core中,WebAPi和MVC的请求管道被合并在一起,当我们建立控

autofac + owin + webform + mvc + webapi集成demo

http://git.oschina.net/shiningrise/AutofacOwinDemo using Microsoft.Owin; using Owin; using System.Web.Mvc; using Autofac; using Autofac.Integration.Owin; using Autofac.Integration.Mvc; using Autofac.Integration.WebApi; using System.Web.Http; using Sy

MVC与WebApi中的异常过滤器

一.MVC的异常过滤器 1.自定义MVC异常过滤器 创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可, 注意,该接口在System.Web.Mvc 命名空间下 /// <summary> /// 自定义的MVC异常过滤器 /// 可以在Controller或Action上单独使用,也可直接注册为全局过滤器 /// </summary> publicclassMVCExceptionFilterAtt

关于mvc、webapi中get、post、put、delete的参数

webapi中post提交的数据必须是一个类,get提交的数量无所谓 多种参数get时,参数名不能相同: 在能通过c#的校验的前提下,参数名.参数数量不能全完相同 public string Get(int page, int pagesize) { return "test1"; } public string Get(int page) { return "test2"; } 这是没问题的 public string Get(int page, int page

AutoFac实现WebAPI依赖注入(EF以及Mysql)

什么是依赖注入? 我们以实际的例子来加以介绍 实体如下 public class Product { public int ID { get; set; } public string Name { get; set; } public decimal Price { get; set; } } EF的实现如下 public class ProductContext: DbContext { public ProductContext(): base( "ProductContext"

c# autofac结合WebApi的使用

原文:c# autofac结合WebApi的使用 一.下载相关类库引用 install-package Autofac install-package Autofac.Mvc4 install-package Autofac.WebApi2 二.配置autofac public class AutofacUtil { /// <summary> /// Autofac容器对象 /// </summary> private static IContainer _container;