zoukankan      html  css  js  c++  java
  • 转 Autofac怎么依赖注入ASP.NET MVC5类的静态方法

    之前我有介绍过怎么在ASP.NET mvc5中实现的Controller的依赖注入。一般是通过Contrller的构造函数的参数或者属性来注入,但是这有一个共同点就是调用这个类的方法一般都是实例方法,也就是要实例化这个类才能调用它的方法。但是如果它是一个静态方法我们又该怎么办呢?其实也很简单,下面我们就通过一个写日志的组件来介绍怎么实现ASP.NET MVC5类的静态方法的依赖注入。因为考虑到很多地方都要用到写日志这个方法,而且我们又不想每次调用都需要new一个对象,所以把调用方法封装成一些静态方法。

    DependencyRegistrar.cs

    using Autofac;
    using Autofac.Integration.Mvc;
    using Lanhu.Services;
    using Lanhu.Services.MetionNowOrder;
    using Lanhu.Services.Member;
    using System.Web.Mvc;
     
    namespace Lanhu.Admin
    {
     
        public class DependencyRegistrar
        {
            public static void RegisterDependencies()
            {
                var builder = new ContainerBuilder();
                builder.RegisterControllers(typeof(MvcApplication).Assembly);
     
                builder.RegisterType<Log_UserLogonService>().As<ILog_UserLogon>().InstancePerLifetimeScope();
                builder.RegisterType<Log_UserOperateService>().As<ILog_UserOperate>().InstancePerLifetimeScope();
               //autofac 注册依赖
               IContainer container = builder.Build();
               DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
          }
      }
     
    }

    在App_Start事件中调用上面的会依赖注入代码:

    using Lanhu.Core;
    using System;
    using System.Collections.Generic;
    using System.linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
     
    namespace Lanhu.Admin
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
     
                DependencyRegistrar.RegisterDependencies();
               
            }
        }
    }

    LogFacade.cs:

    using Lanhu.Model;
    using Lanhu.Services;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Mvc;
     
    namespace Lanhu.Admin.Infrastructure
    {
        public class LogFacade
        {
            public static bool AddLogonLog(MLog_UserLogon model)
            {
                var service = DependencyResolver.Current.GetService<ILog_UserLogon>();
                return service.Insert(model);
            }
     
            public static bool AddOperateLog(string info,bool isError=false)
            {
                var service = DependencyResolver.Current.GetService<ILog_UserOperate>();
                if (isError)
                    model.ErrorMsg = info;
                else
                    model.Msg = info;
                return service.Insert(model);
            }
     
            public static bool AddOperateLog(MLog_UserOperate model)
            {
                var service = DependencyResolver.Current.GetService<ILog_UserOperate>();
                return service.Insert(model);
            }
        }
    }

    上面封装了三个静态方法,在方法里面通过DependencyResolver.Current.GetService从Ioc容器中获取相应类型的依赖对象。这个LogFacade使用外观模式,让调用显得很简单。

    转自:https://www.lanhusoft.com/Article/366.html

  • 相关阅读:
    [学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践
    基于jquery的移动端JS无缝切换
    判断form表单每个input字段是否有内容
    整合常用功能的JS小组件库-v1.0
    获取网页可见区域的宽高(兼容各浏览器)
    判断网页上滚还是下滚
    文字溢出处理
    网页导航条滚动固定
    清除浮动
    CSS文字两端对齐
  • 原文地址:https://www.cnblogs.com/sanday/p/9714428.html
Copyright © 2011-2022 走看看