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