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

    运行结果

  • 相关阅读:
    如何使用phantomJS来模拟一个HTML元素的鼠标悬停
    nodejs中使用cheerio爬取并解析html网页
    Node.js 动态网页爬取 PhantomJS 使用入门(转)
    一口一口吃掉Hibernate(五)——一对多单向关联映射
    开源 免费 java CMS
    [WinForm]dataGridView导出到EXCEL
    关键帧和动画
    uva 696
    uva 11181
    IE下target获得焦点时存在虚线的问题
  • 原文地址:https://www.cnblogs.com/bubugao/p/AutofacDemo.html
Copyright © 2011-2022 走看看