【发布时间】:2015-01-05 20:41:48
【问题描述】:
我有带有 ODataController 的 WebApi 项目,我正在尝试将一些依赖项注入 MyController。我关注的是 Mark Seemann 的 blogpost。
考虑下面的代码。
问题是,当 MyController 创建时,我在这一行的 WindsorCompositionRoot Create 方法中出现异常,
var controller = (IHttpController)this.container.Resolve(controllerType);
“Castle.MicroKernel.ComponentNotFoundException”类型的异常 发生在 Castle.Windsor.dll 中但未在用户代码中处理
附加信息:没有支持该服务的组件 找到 System.Web.OData.MetadataController
知道如何解决这个问题吗? 谢谢。
我的控制器:
public class MyController : ODataController
{
private readonly DataLayer _db;
public PrepravyController(DataLayer db)
{
_db = db;
}
}
CompositonRoot:
public class WindsorCompositionRoot : IHttpControllerActivator
{
private readonly IWindsorContainer container;
public WindsorCompositionRoot(IWindsorContainer container)
{
this.container = container;
}
public IHttpController Create(
HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)
{
var controller =
(IHttpController)this.container.Resolve(controllerType);
request.RegisterForDispose(
new Release(
() => this.container.Release(controller)));
return controller;
}
private class Release : IDisposable
{
private readonly Action release;
public Release(Action release)
{
this.release = release;
}
public void Dispose()
{
this.release();
}
}
}
全球 asax:
var container = new WindsorContainer();
container.Install(new RepositoriesInstaller());
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new WindsorCompositionRoot(container));
GlobalConfiguration.Configure(WebApiConfig.Register);
【问题讨论】:
-
您确定收到此错误时的“controllerType”是 MyController 类型吗?
标签: asp.net-mvc asp.net-web-api dependency-injection odata castle-windsor