我使用洋葱架构方法使用MVC5创建了一个应用程序。该解决方案包含3个项目(核心、基础设施和UI)。UI包含Web控制器和MVC控制器。我遇到的问题是依赖注入。我安装了Unity.MVC5 & Unity.WebApi。我在App_Start下的App_Start如下所示:
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IPricingService, PricingService>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
}我的global.asax看起来是这样的:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
System.Web.Http.GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
UnityConfig.RegisterComponents();
}为了测试我的控制器,我定义了我的家庭控制器如下:
private readonly IPricingService _pricingService;
public HomeController(IPricingService PricingService)
{
this._pricingService = PricingService;
}在运行主页时,我得到了没有为这个对象定义的无参数构造函数.
现在,转到另一个测试场景,我创建了一个web控制器,如下所示:
private readonly IPricingService _pricingService;
public TestApiController(IPricingService PricingService)
{
this._pricingService = PricingService;
}测试web会生成以下错误:
试图创建类型为“TextApiController”的控制器时出错。确保控制器有一个无参数的公共构造函数。“,"exceptionType":"System.InvalidOperationException”。
不知道我错过了什么。请给我建议。
发布于 2015-02-20 19:06:48
您应该将Unity.WebApi.DependencyResolver注入到WebApi配置而不是GlobalConfiguration.Configuration.DependencyResolver中的中。
public static void Register(HttpConfiguration config)
{
var container = new UnityContainer();
container.RegisterType<IProductRepository, ProductRepository>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
// Other Web API configuration not shown.
}还需要在BeginScope方法如本MSDN文章所示中实现子容器。
https://stackoverflow.com/questions/28633456
复制相似问题