C# Ninject中的属性注入不起作用

C# Ninject中的属性注入不起作用,c#,dependency-injection,ninject,C#,Dependency Injection,Ninject,我有这样一门课 public sealed class SimpleTextIndex<T> : TextIndex where T : ITextParser { [Inject] public T TextParser { get; set; } // something... 一切正常!为什么? 问题在于,只有在通过构造函数构造对象之后才能进行属性注入,即在构造函数完成之前,Ninject无法设置属性值 由于您使用的是从构造函数调用的方法的依赖项,因此

我有这样一门课

public sealed class SimpleTextIndex<T> : TextIndex where T : ITextParser
{
    [Inject]
    public T TextParser { get; set; }
    // something...

一切正常!为什么?

问题在于,只有在通过构造函数构造对象之后才能进行属性注入,即在构造函数完成之前,Ninject无法设置属性值

由于您使用的是从构造函数调用的方法的依赖项,因此该属性尚未设置,因此其值为null

在构造过程中不要使用依赖项,或者像这样使用构造函数注入:

//[Inject] //remove this attribute
public T TextParser { get; set; }

public SimpleTextIndex(T parser, string text = "")
{
    TextParser = parser;
    ...
}

问题是,属性注入只有在通过构造函数构造对象之后才进行,即在构造函数完成之前,Ninject无法设置属性值

由于您使用的是从构造函数调用的方法的依赖项,因此该属性尚未设置,因此其值为null

在构造过程中不要使用依赖项,或者像这样使用构造函数注入:

//[Inject] //remove this attribute
public T TextParser { get; set; }

public SimpleTextIndex(T parser, string text = "")
{
    TextParser = parser;
    ...
}

我无法复制你的问题。您使用的Ninject版本是什么?
SimpleTextIndex
是否有构造函数?您能否提供完整的代码,以便我们重现您的问题?Ninject 2.6.4。是的,SimpleTextIndex有一个没有参数的构造函数。哦,我忘了说。尝试在SimpleTextIndex中使用TextParser属性时遇到的NullReferenceException。如果不使用它,也不会有例外:)SimpleTextIndex类的完整代码:您是如何获得此版本的?通过努吉?我找不到它。您是否检查了
TextParser
的值是否为空?我无法重现您的问题。您使用的Ninject版本是什么?
SimpleTextIndex
是否有构造函数?您能否提供完整的代码,以便我们重现您的问题?Ninject 2.6.4。是的,SimpleTextIndex有一个没有参数的构造函数。哦,我忘了说。尝试在SimpleTextIndex中使用TextParser属性时遇到的NullReferenceException。如果不使用它,也不会有例外:)SimpleTextIndex类的完整代码:您是如何获得此版本的?通过努吉?我找不到它。您是否检查了
TextParser
的值是否为空?我想我也遇到了同样的问题。我想我的问题是我把构造函数注入和属性注入混合在一起,我想我也有同样的问题。我认为我的问题是我混合了构造函数注入和属性注入。
public SimpleTextIndex()
{
  DependencyResolver.Kernel.Inject(this);
}
//[Inject] //remove this attribute
public T TextParser { get; set; }

public SimpleTextIndex(T parser, string text = "")
{
    TextParser = parser;
    ...
}