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小例子的更多相关文章

  1. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  2. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  3. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  4. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  5. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  6. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  7. 【zTree】 zTree使用的 小例子

    使用zTree树不是第一次了  但是 还是翻阅着之前做的 对照着 使用起来比较方便  这里就把小例子列出来   总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先  在 ...

  8. js小例子(标签页)

    运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...

  9. sbrk与brk的使用小例子

    sbrk() 和 brk() - Unix的系统函数   sbrk()和brk() 系统的底层会维护一个位置,通过位置的移动完成内存的分配和回收.映射内存时 以一个内存页作为基本单位.   void* ...

随机推荐

  1. 学校管理系统C#(数据库、源码、演讲内容、ppt等)

    该系统使用C#语言编程 在学院项目展获取第一名 git地址:https://github.com/weibanggang/schoolsystem

  2. 【luogu P1962 斐波那契数列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1962 给你篇dalao的blog自己看吧,把矩阵快速幂的板子一改就OK #include <algor ...

  3. C# Pascal 命名规则

    在以前版本的Visual Studio中,微软曾建议使用匈牙利命名法来写代码,并鼓励开发这位写出统一格式的代码而使用相同的法则.在最近发布的.NET和它的编程语言中,微软更换了他的这一法则.如果你用过 ...

  4. Extjs treePanel 的treestore重复加载问题解决

    在Extjs 4.2.2 中构建一个treePanel 发现设置rootVisible后 ,treeStore中设置的autoLoad:false不启作用,在组件初始化的时候即加载数据源,造成数据重复 ...

  5. java容易混淆的的内部类相关概念

    关于内部类: 作用: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的 ...

  6. JSTL&EL

    JSTL <1> 实现了JSP页面代码的复用 <2> 使得可读性更强 导入 <%@ taglib uri="http://java.sun.com/jsp/js ...

  7. 【转】RMAN删除过期备份或非过期备份

    (一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件.当使用RMAN执行备份操作时,会在RMAN资料库(RMAN Repository)中生成RMAN备份记录,默认情况下RMAN ...

  8. iOS之已经审核通过的app在App Store上搜不到的解决办法

    修改定价将你的app定价修改成0.99刀 修改你的发行范围,全取消后只选中国. save这时候你的app status将会变成pending contract. 将之前的修改都改回来,修改定价free ...

  9. 【c学习-9】

    /*内存练习*/ #include #include//引入内存分配库文件 int main(){ double* x; //定义整型指针和double指针 int* y; x=(double*)ma ...

  10. Java --本地提交MapReduce作业至集群☞实现 Word Count

    还是那句话,看别人写的的总是觉得心累,代码一贴,一打包,扔到Hadoop上跑一遍就完事了????写个测试样例程序(MapReduce中的Hello World)还要这么麻烦!!!?,还本地打Jar包, ...