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

    运行结果

  • 相关阅读:
    Http错误代码
    Android View自动生成插件
    【Android】设备标识
    【Android】键盘的展开和收起
    【Android】Activity生命周期(亲测)
    【Android】IntentService & HandlerThread源码解析
    【Android】与服务器实现JSON数据通信
    【Web】Eclipse + Maven + Struts搭建服务器
    【Android】Kill Service
    【Android】Handler、Looper源码分析
  • 原文地址:https://www.cnblogs.com/bubugao/p/AutofacDemo.html
Copyright © 2011-2022 走看看