在MVC 3中,他们添加了我一直使用的依赖性解析器。在回答某人的问题时,有人评论过你应该使用Ninject MVC 3插件。
所以我的问题是为什么要将它用在内置的?如果是这样的话你怎么设置它?
以上是我回答的问题的链接。
答案 0 :(得分:15)
ASP.NET MVC 3提供了一个依赖注入服务,它将挂钩到您选择实现的任何依赖项解析器。 Ninject MVC 3插件的功能非常简单,因为它必须做的只是实现System.Web.Mvc.IDependencyResolver中定义的类型解析方法,并调用适当的Ninject方法返回请求的类型。
无论您选择使用自己的IDependencyResolver并将其映射到Ninject(或任何其他依赖注入框架),或者您选择使用免费提供的Ninject MVC 3插件,都是一个微不足道的区别。
这是一个功能齐全的示例,说明手动滚动,Ninject兼容的IDependencyResolver可能是什么样子。 Ninject MVC 3插件基本上非常相似:
public class NinjectDependencyResolver : IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectDependencyResolver(IKernel kernel) {
_kernel = kernel;
}
public object GetService(Type serviceType) {
return _kernel.TryGet(serviceType, new IParameter[0]);
}
public IEnumerable<object> GetServices(Type serviceType) {
return _kernel.GetAll(serviceType, new IParameter[0]);
}
}
这里的关键点是 ASP.NET MVC不提供完整的依赖注入框架;它仅提供在整个ASP.NET MVC请求管道(控制器分辨率,视图分辨率等)中的特定点通过IoC容器(即Ninject)检索所需类型实例所需的层。
注意:如果我使用的任何术语不太准确,请通知我。
答案 1 :(得分:13)
Ninject.Web.MVC扩展(或Ninject.MVC3 NuGet包)内部也使用依赖解析器。所以基本上它使用相同的机制。但是使用扩展而不是实现自己的依赖解析器有几个原因: