我有一个使用Ninject的项目。我创建一个接口并在另一个类中实现它。添加以下代码以注册服务
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IArticleContent>().To<ArticleService>().InRequestScope();
}
创建网页并编写以下代码
[Inject]
public IArticleContent _ArticleContentService { get; set; }
编写更多代码以将数据绑定到控件并所有工作。
然后我将上述公开声明更改为私人
[Inject]
private IArticleContent _ArticleContentService { get; set; }
得到
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
经过一些研究后我添加了
new StandardKernel(new NinjectSettings() { InjectNonPublic = true });
到Start方法下的NinjectWebCommon
类(也尝试使用RegisterServices
方法)但是同样的错误。因此,经过进一步的研究,它似乎我需要以另一种方式(即在我的服务类的构造函数内)这样做,或者我需要在其他地方使用上面的代码。
有人可以建议如何在设置私有或“正确”方式时使用Ninject属性吗?
答案 0 :(得分:0)
除了将InjectNonPublic
设置为true
之外,还需要将InjectParentPrivateProperties
设置为true
:
var kernel = new StandardKernel(new NinjectSettings
{
InjectNonPublic = true,
InjectParentPrivateProperties = true
});
原因是页面类本身实际上是在运行时从相应的aspx
文件生成的类的父级。