在 MVC 3 中,他们添加了我一直在使用的 Dependency Resolver。在回答某人对您发表评论的问题时,您应该使用 Ninject MVC 3 插件。
所以我的问题是为什么要使用它而不是内置的?如果这是要走的路,你如何设置它?
以上是我回答的问题的链接。
在 MVC 3 中,他们添加了我一直在使用的 Dependency Resolver。在回答某人对您发表评论的问题时,您应该使用 Ninject MVC 3 插件。
所以我的问题是为什么要使用它而不是内置的?如果这是要走的路,你如何设置它?
以上是我回答的问题的链接。
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)检索所需类型实例所需的层。
注意:如果我使用的任何术语不太准确,请告知我。
Ninject.Web.MVC 扩展(或 Ninject.MVC3 NuGet 包)也在内部使用依赖解析器。所以基本上它使用相同的机制。但是使用扩展而不是实现自己的依赖解析器有几个原因: