AutoFac mvc和WebAPI 注册Service (接口和实现)

AutoFac  mvc和WebAPI  注册Service (接口和实现)

1、准备组件版本:Autofac 3.5.0    Autofac.Integration.Mvc 3.3.0.0  (Install-package  Autofac.Mvc 相应版本)   Autofac.Integration.WebApi 4.0.0.0 (Install-package  Autofac.WebApi 相应版本)

  ***install-package autofac.webapi2 (注意:您的项目中如果使用的是webapi2,此处必须为webapi2而不是webapi,否则在运行时将出现“重写成员“Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()”时违反了继承安全性规则。重写方法的          安全可访问性必须与所重写方法的安全可访问性匹配。”错误。)

 

2、Global.asax  中代码:

复制代码
 protected void Application_Start()
   {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            // AutoFac 注入初始化
            AutoFacBootStrapper.CoreAutoFacInit();
      }
复制代码

3、实现注入类: AutoFacBootStrapper  及实现批量service注入

复制代码
 public class AutoFacBootStrapper
    {
        public static void CoreAutoFacInit()
        {
           var builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            //注册所有的Controllers
            builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
            #region 可正常 用
            var baseType = typeof(IDependency);
            var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();
            var allServices = assemblys.SelectMany(s => s.GetTypes()).Where(p => baseType.IsAssignableFrom(p) && p != baseType);
            builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(t => baseType.IsAssignableFrom(t) && t != baseType)
                .AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();
            //注册所有的ApiControllers
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
            //autofac 注册依赖
            IContainer container = builder.Build();
            // webApi部分注册
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            #endregion 可正常用
        }

    }
复制代码

4、接口部分需继承 IDpendncy,该类无实现类 仅为批量注册提供标示

 public interface IDependency
    {

    }

5、IService 和Servicep 实现

 public interface ICustomerService:IDependency
    {

          string GetCustomerName();
        

    }
复制代码
 public class CustomerService: ICustomerService
    {
        /// <summary>
        /// 获取客户信息
        /// </summary>
        /// <returns></returns>
        public string GetCustomerName()
        {
            return "WebAPI_Success";
        }
    }
复制代码

6、Controller 调用注入类 和ApiController 调用注入类

复制代码
  public class HomeController : Controller
    {

        public ICustomerService _customerService { get; set; }
        public ActionResult Index()
        {
            ViewBag.Title = "Home Page";

            return View();
        }
    }
复制代码

 

复制代码
  public class CustController : ApiController
    {

        public ICustomerService _customerService { get; set; }
        // GET: api/Cust
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/Cust/5
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/Cust
        public void Post([FromBody]string value)
        {
        }
}
复制代码


至此Autofac 注入就完成了,如有问题请联系我 相互交流。qq:626382542

 

posted @   xiaoBai1001  阅读(1394)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示