Autofac小例子
AutoFac是.net平台下的IOC容器产品。今天学习一下它的使用方法。
1.最简单的使用。
public interface ITestDao
{
string SayHello();
}
public class TestDao : ITestDao
{
public string SayHello()
{
return "hello world!";
}
} var builder = new ContainerBuilder();
builder.RegisterType<TestDao>().As<ITestDao>(); IContainer container = builder.Build();
var tdao = container.Resolve<ITestDao>();
string saystr = tdao.SayHello();
builder.RegisterType<TestDao>().As<ITestDao>();注册TestDao是ITestDao的实现。
然后下面进行调用就行。 2.跟mvc一起使用
public interface ITestDao
{
string SayHello();
}
public class TestDao : ITestDao
{
public string SayHello()
{
return "hello world!";
}
} public class HomeController : Controller
{ private ITestDao _testDao; public HomeController(ITestDao testDao)
{
this._testDao = testDao;
} public ActionResult Index()
{ string saystr = _testDao.SayHello(); return View();
} }
在Global.asax里需要添加几行代码
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//依赖注入
var builder = new ContainerBuilder();
SetupResolveRules(builder);
builder.RegisterControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
} private void SetupResolveRules(ContainerBuilder builder)
{
builder.RegisterType<TestDao>().As<ITestDao>();
}
}
3.将注册代码放进配置文件。
public interface ITestDao
{
string SayHello();
}
public class TestDao : ITestDao
{
public string SayHello()
{
return "hello world!";
}
} public class HomeController : Controller
{ private ITestDao _testDao; public HomeController(ITestDao testDao)
{
this._testDao = testDao;
} public ActionResult Index()
{ string saystr = _testDao.SayHello(); return View();
} }
在Global.asax里需要添加几行代码
protected void Application_Start()
{
//依赖注入
var builder = new ContainerBuilder();
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
builder.RegisterControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
在Web.config添加配置文件
<configSections>
<section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration" />
</configSections>
<autofac defaultAssembly="MvcApplication11">
<components>
<component type="MvcApplication11.Models.TestDao" service="MvcApplication11.Models.ITestDao" />
</components>
</autofac>
4.系统自动注册,省略掉手工的配置和xml文件配置。(2014-07-16补充)
写一个基础接口,让你所有的接口都实现此接口,此接口起到的作用仅仅是个标识作用。
public interface IAutofac//标识接口
{ }
public interface ITestDao : IAutofac
{
string SayHello();
}
public class TestDao : ITestDao
{
public string SayHello()
{
return "hello world!";
}
} public class HomeController : Controller
{ private ITestDao _testDao; public HomeController(ITestDao testDao)
{
this._testDao = testDao;
} public ActionResult Index()
{ string saystr = _testDao.SayHello(); return View();
} }
然后更改Global.asax里面的代码,AppDomain.CurrentDomain.GetAssemblies()获取当前程序域里所有的程序集,下面让RegisterAssemblyTypes自动注册所有继承了IAutofac的接口。
protected void Application_Start()
{
//依赖注入
var builder = new ContainerBuilder();
//builder.RegisterModule(new ConfigurationSettingsReader("autofac")); var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();
builder.RegisterAssemblyTypes(assemblys.ToArray())
.Where(e => typeof(IAutofac).IsAssignableFrom(e) && e != typeof(IAutofac))
.AsImplementedInterfaces()
.InstancePerLifetimeScope(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Autofac小例子的更多相关文章
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
- java即时通信小例子
学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- bootstrap 模态 modal 小例子
bootstrap 模态 modal 小例子 <html> <head> <meta charset="utf-8" /> <title ...
- INI配置文件分析小例子
随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...
- JavaScript小例子:复选框全选
JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...
- 【zTree】 zTree使用的 小例子
使用zTree树不是第一次了 但是 还是翻阅着之前做的 对照着 使用起来比较方便 这里就把小例子列出来 总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先 在 ...
- js小例子(标签页)
运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...
- sbrk与brk的使用小例子
sbrk() 和 brk() - Unix的系统函数 sbrk()和brk() 系统的底层会维护一个位置,通过位置的移动完成内存的分配和回收.映射内存时 以一个内存页作为基本单位. void* ...
随机推荐
- Uva 10534 波浪子序列
题目链接:https://vjudge.net/contest/160916#problem/C 题意: 求一个奇数长的子序列,前一半严格递增,后一半严格递减:O(nlogn) 分析: 再次复习一下L ...
- 深搜(DFS),回溯,Fire Net
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 解题报告: 这里的深搜有一点不同,就是,在深搜每一个点时,都要深搜每 ...
- 查看flash的版本
查看当前浏览器的flash版本: http://www.adobe.com/swf/software/flash/about/flashAbout_info_small.swf 针对谷歌浏览器 chr ...
- scr 和 href 区别
HTML中的href和src有什么区别? 加载js的时候,用到的是<script style='text/javascript' src='js/demo.js'></script& ...
- Android学习笔记_3_四种布局
Android布局是应用界面开发的重要一环,在Android中,共有四种布局方式, 分别是:FrameLayout( 帧布局 ).LinearLayout (线性布局).TableLayout(表格布 ...
- 封装全局icon组件 svg (仿造element-ui源码)
一.引入 svg-sprite-loader 插件 npm install svg-sprite-loader --save-dev vue-cli项目默认情况下会使用 url-loader 对sv ...
- android 省市区三级联动
最近项目,需要用到三级联动,在网上找了一些例子,进行了修改,实现,提炼出来了给大家分享 实现思路是在三个wheelview 进行联动.选择了省,马上就关联到市和区,选择了市 ,马上就可以关联到区. 效 ...
- IntelliJ IDEA使用hibernate
环境:数据库:mariadb 10.2.16 https://downloads.mariadb.org/配置好maven:见收藏的博文链接 https://www.cnblogs.com/ICE_ ...
- django-orm简记
首先orm是什么? orm-------->对象关系映射 专业性解释网上一大推,随便搜搜就能了解大概.在我理解(通俗):一个类 ----- 数据库中一张表 类属性 ----- 数据表中的字段名 ...
- windows10安装mysql8.0.11(免安装版)
1.MySQL8.0.11下载网址:https://dev.mysql.com/downloads/mysql/ 2.配置环境变量:我的电脑->属性->高级系统设置->环境变量-&g ...