好的,所以我看了很多关于如何让 DI 使用 Web API 的帖子。尝试做简单的ctor注入。我在此处粘贴的内容有效,但这并不意味着我对此感到满意。如果有人有什么建议,请发出声音。
看来我们不必控制 WEB API 中的控制器创建,这让我质疑依赖关系的正确释放。我将事物设置为范围,您将通过查看代码来了解。我们被迫使用 IDependencyResolver,我认为这很糟糕,但这是我能找到的唯一解决方法,因为我尝试使用 IControllerActivator 的其他钩子似乎都不起作用。
见代码。
public class WindsorWeApiResolver:WindsorWebApiDependencyScope,IDependencyResolver
{
private readonly IWindsorContainer _container;
public WindsorWeApiResolver(IWindsorContainer container) : base(container)
{
_container = container;
}
public IDependencyScope BeginScope()
{
return new WindsorWebApiDependencyScope(_container);
}
}
public class WindsorWebApiDependencyScope:IDependencyScope
{
private readonly IWindsorContainer _container;
private readonly IDisposable _scope;
public WindsorWebApiDependencyScope(IWindsorContainer container)
{
_container = container;
_scope = _container.BeginScope();
}
public void Dispose()
{
_scope.Dispose();
}
public object GetService(Type serviceType)
{
return _container.Kernel.HasComponent(serviceType) ? _container.Resolve(serviceType) : null;
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.ResolveAll(serviceType).Cast<object>().ToArray();
}
}