使用MVC5和WebApi2控制器进行适当的依赖注入的常见连接点是什么?

时间:2016-05-31 14:36:19

标签: asp.net-mvc dependency-injection asp.net-web-api2 unity-container

我在同一个项目中同时拥有MVC控制器和WebApi控制器。我想通过他们的构造函数将一个服务和一个记录器注入控制器。 DependencyResolver是否具有适当的可扩展性?我可以通过MVC控制器和WebApi控制器实现共享相同的服务和记录器吗?我使用Unity作为我的IoC容器。

1 个答案:

答案 0 :(得分:3)

WebAPI和MVC是完全独立的框架。它们中的每一个都支持DI,如果您在composition root中同时实现System.Web.Mvc.IDependencyResolver(或System.Web.Mvc.IControllerFactory)和System.Web.Http.IDependencyResolver,它们就可以在同一个项目中工作。

一般来说,大多数主要的DI容器都有NuGet包,这使得集成变得容易,但是你必须查阅你使用的容器上的文档。

Here is an article介绍了如何集成Unity的细节。安装Unity.WebApiUnity.Mvc5软件包并按如下方式添加配置。

using Microsoft.Practices.Unity;
using System.Web.Http;
using System.Web.Mvc;

namespace WebApplication1
{
    public static class UnityConfig
    {
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // e.g. container.RegisterType<ITestService, TestService>();

            DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container));

            GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
        }
    }
}