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的方式, 来获取想要获取到的类的实例

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

  1. 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)

    在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...

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

    发现网上关于AutoFac的Demo源码比较少,综合MVC和WepApi的更少.所以贴出源码 WebApi项目(MVC4不需要引用,历史遗留问题,人懒没删) 建项目 新建类库IAutoFacDal(接 ...

  3. autofac 在webapi中拿到当前request的scope

    https://stackoverflow.com/questions/31321386/autofac-web-api-get-current-scope   Unless you are usin ...

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

    什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ...

  5. MVC WebAPI中响应客户端请求返回图片

    // GET api/values public HttpResponseMessage Get() {     Image img = GetImage();     MemoryStream ms ...

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

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  7. ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

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

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  9. AutoFac mvc和WebAPI 注册Service (接口和实现)

    AutoFac  mvc和WebAPI  注册Service (接口和实现) 1.准备组件版本:Autofac 3.5.0    Autofac.Integration.Mvc 3.3.0.0  (I ...

随机推荐

  1. 前端框架 EasyUI (0) 重新温习(序言)

    几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...

  2. Python标准库--typing

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理

    系列目录 前言 Senparc.Weixin.MP SDK提供了MessageHandler消息处理类 在作者的Wiki中也详细说明了如何定义这个类,下面我们来演示,消息的回复,及效果 了解Messa ...

  4. Hawk 5. 数据库系统

    Hawk在设计之初,就是以弱schema风格定义的.没有严格的列名和列属性.用C#这样的静态强类型语言编写Hawk,其实并不方便.但弱schema让Hawk变得更灵活更强大. 因此,Hawk虽然之前支 ...

  5. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  6. python 3.5 成功安装 scrapy 的步骤

    http://www.cnblogs.com/hhh5460/p/5814275.html

  7. 使用github远程仓库

    经过几天对github的研究,终于把自己想完成的给解决了,发现google真的有很多解释,但是很多也会出现一些bug,对于初学者真的很多烦恼,所以整理一份,能给初识github的你有所帮助 一,首先, ...

  8. <程序员从入门到精通> -- How

    定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...

  9. 机器指令翻译成 JavaScript —— No.4 动态跳转

    上一篇,我们用模拟流程的方式,解决了跳转问题. 不过静态跳转,好歹事先是知道来龙去脉的.而动态跳转,只有运行时才知道要去哪.既然流程都是未知的,翻译从何谈起? 动态跳转,平时出现的多吗?非常多!除了 ...

  10. Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web服务器

    最近在Ubuntu上搭建了Asp.Net的Web服务器,其中遇到很多问题,整理一下思路,以备后用. 搭建环境以及配套软件 Ubuntu: 11.10 Mono:3.0.6 下载地址(http://do ...