有人可以为我发光吗?
我的网站全部使用温莎城堡。我有一个控制器工厂和控制器和服务的安装程序。一切都很好。
现在我刚刚创建了一个名为IDependencyResolver
的{{1}}实现类,其中包含直接实现:
WindsorDependencyResolver
我已经设置了这样的设置(global.asax):
public class WindsorDependencyResolver : System.Web.Mvc.IDependencyResolver
{
private readonly IKernel _kernel;
public WindsorDependencyResolver (IKernel kernel)
{
_kernel = kernel;
}
public object GetService(Type serviceType)
{
return _kernel.Resolve(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _kernel.ResolveAll(serviceType) as IEnumerable<object>;
}
}
现在怎么样?什么时候“使用”?我应该停止使用DependencyResolver.SetResolver(new WindsorDependencyResolver(kernel));
吗?
答案 0 :(得分:2)
我的理解是IDependencyResolver是MVC 3内部用于执行服务位置/控制反转的内容。因此,为了让您的控制器能够正确实例化,并能够注入您拥有的任何依赖项,您需要告诉MVC如何与您使用的容器(在您的情况下为Windsor)进行通信。
当你需要通过构造函数/属性注入从容器中取出一些东西时,你仍然想要使用kernel.Resolve(someType)。
有趣的是,MSDN文档指向IDependencyResolver上的Brad Wilson's Blog Post以获取详细信息。
答案 1 :(得分:2)
听起来你已经有了一个自定义的IControllerFactory。如果是这样,只要坚持下去。这是一个比IDependencyResolver(which has lots of problems)的黑客更好的解决方案。