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

  • 相关阅读:
    c#基于业务对象的筛选
    SQLServer索引调优实践
    C#中抽象类和接口的区别
    c#基础(2) 理解委托和事件
    建议学习jQuery的步骤!
    SQL SERVER存储过程调用存储过程并接收输出参数或返回值的方法
    ASP.NET基于JQUERY的高性能的TreeView
    GetManifestResourceStream得到的Stream是null的解决
    Using GDI+ on Windows Mobile 初体验
    提供一个Windows mobile Native UI 程序,循序渐进开发,并附有代码!
  • 原文地址:https://www.cnblogs.com/sanday/p/9714428.html
Copyright © 2011-2022 走看看