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 ...
随机推荐
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- 6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置
网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:ht ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
- 谈一谈NOSQL的应用,Redis/Mongo
1.心路历程 上年11月份来公司了,和另外一个同事一起,做了公司一个移动项目的微信公众号,然后为了推广微信公众号,策划那边需要我们做一些活动,包括抽奖,投票.最开始是没有用过redis的,公司因为考虑 ...
- Java FtpClient 实现文件上传服务
一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...
- Java compiler level does not match解决方法
从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level d ...
- 解决“chrome提示adobe flash player 已经过期”的小问题
这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- EC笔记:第4部分:22、所有成员都应该是private的
EC笔记:第4部分:22.所有成员都应该是private的 更简单的访问 用户不用记得什么时候该带上括号,什么时候不用带上括号(因为很确定的就要带上括号) 访问限制 对于public的成员变量,我们可 ...