Mvc Autofac构造器注入
2024-10-22 05:17:17
新建MVC项目,添加程序集引用
定义接口ILog
public interface ILog
{
string Save(string message);
}
类TxtLog实现接口ILog
public class TxtLog:ILog
{
public string Save(string message)
{
return "TxtLog";
}
}
类DbLog实现接口ILog
public class DbLog:ILog
{
public string Save(string message)
{
return "DbLog";
}
}
修改HomeController里面Index方法,改为如下,注意引用
private ILog _log; //构造器注入
public HomeController(ILog log)
{
_log = log;
} // GET: /Home/ public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.LogTypeName = _log.Save("");
return View();
}
修改页面Index.cshtml ,添加如下代码
<!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<h2>ILog's type name is @ViewBag.LogTypeName</h2>
</div>
</body>
</html>
修改Global.asax,在Application_Start()方法里面添加如下代码,注意引用Autofac、Autofac.Integration.Mvc以及别的引用
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//依赖注入
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<TxtLog>().As<ILog>().InstancePerHttpRequest();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
注意: DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 这个必须放在builder.RegisterControllers(Assembly.GetExecutingAssembly());的后面,不然会出现错误:没有为该对象定义无参数的构造函数。
运行结果
最新文章
- Toad for Sqlserver
- 【直播】APP全量混淆和瘦身技术揭秘
- GIS规划应用——基于哈夫模型的GIS服务区分析
- 电脑技巧:Win8/Win10无法打开这个应用|无法使用内置管理员账户的完美解决方法
- 关于JavaScript的浅拷贝和深拷贝
- 根据终端分配不同的url地址
- 矩形嵌套 南阳理工ACM
- WOSA/XFS及SP综述
- 设计模式学习——准备(UML类图)
- VS2008 ctrl+shift+F热键冲突
- oracle execute immediate
- epoll的LT和ET模式
- ArrayList 遍历
- inline函数不能在for循环中使用的原因
- Pod install Error List
- cuda编程-卷积优化
- pandas pivot_table或者groupby实现sql 中的count distinct 功能
- String split方法与Guava Splitter用法区别
- fdisk分区和挂载
- typescript接口的概念 以及属性类型接口