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);
}

最新文章

  1. [css3]叉叉旋转效果
  2. 用Latex写学术论文: IEEE Latex模板和文档设置(\documentclass)
  3. guava--Joiner、Splitter、MapJoinner、MapSplitter
  4. Windows-008-VirtualBox 安装 Win7 前沿配置详解
  5. Linux性能监控
  6. 創建HTTP 服務器
  7. HTML5-draggable(拖放)
  8. org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir异常解决方法
  9. unison + inotify 实现文件实时双向同步部署步骤
  10. Beaglebone Back学习七(URAT串口测试)
  11. 开源java
  12. 怎样卸载goldengate
  13. 【转】Windows与Linux(Ubuntu)双系统时间不一致的解决方法
  14. WPF界面设计技巧(10)-样式的继承
  15. redhat6 + 11G DG部署
  16. JavaScript 简易版 自动轮播 手动轮播 菜鸟交流
  17. MongoDB 系列(一) C# 简易入门封装
  18. Win10家庭版重命名Administrator用户文件夹
  19. IE10以下兼容H5中的placeholder 以及改变它默认颜色
  20. BZOJ_2721_[Violet 5]樱花_数学

热门文章

  1. Java中基本类型和引用类型(简单介绍)
  2. Javascript和android原生互调
  3. ATK 设计框架辅助工具-代码生成器
  4. Long数组转String数组
  5. POJ 2007--Scrambled Polygon(计算凸包,点集顺序)
  6. oracle 12.1.0.2中对象锁对系统的较大影响
  7. motto - MySQL - 常用命令
  8. 关于java dom解析的问题
  9. 创建私有CA并签发证书
  10. jQuery 使用问题