我想使用ninject InRequestScope创建PerRequestResourceProvider的实例:
public class PerRequestResourceProvider: IPerRequestResourceProvider
{
priavte readonly _perRequestResorceInstance;
public PerRequestResourceProvider()
{
_perRequestResorceInstance = new PerRequestResource();
}
public PerRequestResource GetResource()
{
return _perRequestResorceInstance;
}
}
public interface IPerRequestResourceProvider
{
PerRequestResource GetResource();
}
在我的NinjectDependencyResolver中:
.....
kernel.Bind<IPerRequestResourceProvider>.To<PerRequestResourceProvider>().InRequestScope();
我在几个类中注入了IPerRequestResourceProvider。但是当我向PerRequestResourceProvider构造函数添加断点时,我发现PerRequestResourceProvider在一个请求期间创建了三次而不是每个请求单个。怎么了?
更新:源代码ttps://bitbucket.org/maximtkachenko/ninjectinrequestscope/src
答案 0 :(得分:0)
您的代码存在两个问题:
Ninject未正确初始化。 您需要一个Ninject.MVCx包(根据您使用的MVC版本)。要正确配置,请参阅:http://github.com/ninject/ninject.web.mvc
您正在向PerRequestResourceProvider
注入IPerRequestResourceProvider
(类类型),而不是HomeController
(接口类型),因此在.InRequestScope()
上定义了IPerRequestResourceProvider
{1}}绑定没有任何效果。更改HomeController
构造函数以获取注入的接口类型,并且您很好。
Ninject不需要对可实例化(非抽象,...)类进行绑定。这就是使用错误绑定时不明显的原因。