【发布时间】:2011-03-01 20:40:49
【问题描述】:
在 MVC 3 中,他们添加了我一直在使用的 Dependency Resolver。在回答某人对您发表评论的问题时,您应该使用 Ninject MVC 3 插件。
所以我的问题是为什么要使用它而不是内置的?如果这是要走的路,你如何设置它?
以上是我回答的问题的链接。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 ninject ninject-2
在 MVC 3 中,他们添加了我一直在使用的 Dependency Resolver。在回答某人对您发表评论的问题时,您应该使用 Ninject MVC 3 插件。
所以我的问题是为什么要使用它而不是内置的?如果这是要走的路,你如何设置它?
以上是我回答的问题的链接。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 ninject ninject-2
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 没有提供完善的依赖注入框架;它仅提供通过 IoC 容器(即 Ninject)在整个 ASP.NET MVC 请求管道(控制器解析、视图解析等)的特定点检索所需类型实例所需的层。
注意:如果我使用的任何术语不太准确,请告知我。
【讨论】:
OnePerRequestModule,一旦请求结束,它将清除任何绑定 InRequestScope。它还将在运行任何其他 EndRequest 处理程序之前执行。不幸的是,自己这样做并不能阻止这种情况的发生。
Ninject.Web.MVC 扩展(或 Ninject.MVC3 NuGet 包)也在内部使用依赖解析器。所以基本上它使用相同的机制。但是使用扩展而不是实现自己的依赖解析器有几个原因:
【讨论】: