Asp.net mvc MVC 3依赖解析程序还是Ninject MVC插件?
在MVC3中,他们添加了一个依赖解析程序,我一直在使用它。当回答某人的问题时,有人评论你应该使用Ninject MVC 3插件 所以我的问题是为什么要使用它而不是内置的?如果是这样的话,你怎么设置呢Asp.net mvc MVC 3依赖解析程序还是Ninject MVC插件?,asp.net-mvc,asp.net-mvc-3,ninject,ninject-2,Asp.net Mvc,Asp.net Mvc 3,Ninject,Ninject 2,在MVC3中,他们添加了一个依赖解析程序,我一直在使用它。当回答某人的问题时,有人评论你应该使用Ninject MVC 3插件 所以我的问题是为什么要使用它而不是内置的?如果是这样的话,你怎么设置呢 以上是我回答的问题的链接 ASP.NET MVC 3提供了一个依赖项注入服务,它将连接到您选择实现的任何依赖项解析器中。Ninject MVC 3插件的功能非常简单,因为它所要做的就是实现中定义的类型解析方法,并调用适当的Ninject方法来返回请求的类型 无论您选择使用自己的IDependenc
以上是我回答的问题的链接 ASP.NET MVC 3提供了一个依赖项注入服务,它将连接到您选择实现的任何依赖项解析器中。Ninject MVC 3插件的功能非常简单,因为它所要做的就是实现中定义的类型解析方法,并调用适当的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]);
}
}
公共类NinjectDependencyResolver:IDependencyResolver
{
私有只读IKernel_内核;
公共NinjectDependencyResolver(IKernel内核){
_内核=内核;
}
公共对象GetService(类型serviceType){
return _kernel.TryGet(serviceType,新的ipParameter[0]);
}
公共IEnumerable GetServices(类型serviceType){
return _kernel.GetAll(serviceType,新的ipParameter[0]);
}
}
这里的关键点是,ASP.NET MVC并没有提供一个成熟的依赖注入框架;它仅提供通过IoC容器(即Ninject)在ASP.NET MVC请求管道的特定点(控制器分辨率、视图分辨率等)检索所需类型实例所需的层
注意:如果我使用的任何术语不太准确,请通知我。Ninject.Web.MVC扩展(或Ninject.MVC3 NuGet包)也在内部使用依赖项解析程序。所以基本上它使用的是相同的机制。但是使用扩展而不是实现自己的依赖项解析器有几个原因:
这看起来和我现在拥有的差不多(见另一篇文章)。我听说(或者我想我听说)在没有mvc插件的情况下自己这样做不会在使用nhibernate时终止会话。@chobo2我对nhibernate或您描述的问题没有任何实际经验,因此我无法具体说明:[@chobo2,也许您指的是Ninject的
OnePerRequestModule
这将在请求结束后立即清除RequestScope中绑定的任何内容。它也将在运行任何其他EndRequest处理程序之前执行。不幸的是,您自己这样做并不能阻止这种情况发生。@Remo Gloor-我们之间有什么区别en Web.MVc extension和Ninject.MVC3?是一样的。我们保留了NuGet软件包Ninject.MVC3的名称,与以前的名称相同。@Remo-Gloor-那么它是一样的吗?@Remo-Gloor-我已经有多少代码需要更改?没有。只需删除NuGet软件包添加的App_Start部分,请参见