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