Autofac - MVC/WebApi中的应用
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中的应用的更多相关文章
- 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)
在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...
- AutoFac+MVC+WebApi源码----我踩过的坑
发现网上关于AutoFac的Demo源码比较少,综合MVC和WepApi的更少.所以贴出源码 WebApi项目(MVC4不需要引用,历史遗留问题,人懒没删) 建项目 新建类库IAutoFacDal(接 ...
- autofac 在webapi中拿到当前request的scope
https://stackoverflow.com/questions/31321386/autofac-web-api-get-current-scope Unless you are usin ...
- ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)
什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ...
- MVC WebAPI中响应客户端请求返回图片
// GET api/values public HttpResponseMessage Get() { Image img = GetImage(); MemoryStream ms ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- 【转】ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- AutoFac mvc和WebAPI 注册Service (接口和实现)
AutoFac mvc和WebAPI 注册Service (接口和实现) 1.准备组件版本:Autofac 3.5.0 Autofac.Integration.Mvc 3.3.0.0 (I ...
随机推荐
- CSS 3学习——animation动画
以下内容根据官方文档翻译以及自己的理解整理. 1. 介绍 本方案介绍动画(animations).通过动画,开发者可以将CSS属性值的变化指定为一个随时间变化的关键帧(keyframes)的集合.在 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- App你真的需要么
随着智能手机.移动路联网的普及,APP火的一塌糊涂,APP应用可谓五花八门,街上经常看到各种推广:扫码安装送东西,送优惠券.仿佛一夜之间一个企业没有自己的APP就跟不上时代了. 有时我在想:APP,你 ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- angular2系列教程(七)Injectable、Promise、Interface、使用服务
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...
- select、poll、epoll之间的区别总结
select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...
- 手机web如何实现多平台分享
话说App一般都带有分享到社交平台的入口,web网页的分享也有很不错的框架,但是随着HTML5的不断发展,手机web页面越来越多的进入到我们的生活中,那如何在我们的手机上完成分享呢?话说各大分享平台都 ...
- 烂泥:redis3.2.3安装与配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前一段时间写过一篇codis集群的文章,写那篇文章主要是因为当时的项目不支持redis自 ...
- Xamarin和微软发起.NET基金会
新闻<微软宣布成立.NET基金会全面支持开源项目 包括C#编译器Roslyn>,看到大家对微软的开放都很兴奋.在此之前在.NET社区也有了大量的开源项目,所列的24个项目也是早就开源,这次 ...
- [PHP源码阅读]strtolower和strtoupper函数
字符串的操作函数中,字符串的大小写转换也算是比较常用的函数,其底层实现也比较简单,下面来一探究竟. 我在github上有对PHP源码更详细的注解.感兴趣的可以围观一下,给个star.PHP5.4源码注 ...