zoukankan      html  css  js  c++  java
  • Mvc Autofac构造器注入

    新建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());的后面,不然会出现错误:没有为该对象定义无参数的构造函数。

    运行结果

  • 相关阅读:
    Linux学习笔记:使用prompt关闭ftp中mget和mput的确认提醒
    Linux学习笔记:ftp中binary二进制与ascii传输模式的区别
    Linux学习笔记:使用ftp命令上传和下载文件
    Linux学习笔记:scp远程拷贝文件
    MySQL学习笔记:一道group by+group_concat解决的小问题
    MySQL学习笔记:select语句性能优化建议
    Excel学习笔记:if({1,0})用法
    vim加亮和自动缩进
    linux的chown命令
    oracle环境变量
  • 原文地址:https://www.cnblogs.com/bubugao/p/AutofacDemo.html
Copyright © 2011-2022 走看看