我已经在测试项目中安装了 Ninject (v4.0.30319) 包进行测试。在下面创建测试代码,不幸的是 ValidateAbuse.Instance.Repository 始终为 Null。为什么 Ninject 不将存储库绑定到 ValidateAbuse.Repository 属性?你们中的一些人可能会建议使用构造函数绑定,但由于代码结构,我不能使用它。下面的代码只是示例,我需要找到一种绑定到属性的方法。
总是失败的测试方法
[TestMethod]
public void PropertyInjection()
{
using (IKernel kernel = new StandardKernel())
{
kernel.Bind<ISettingsRepository>().To<SettingsRepository>();
Assert.IsNotNull(ValidateAbuse.Instance.Repository);
}
}
存储库接口
public interface ISettingsRepository
{
List<string> GetIpAbuseList();
List<string> GetSourceAbuseList();
}
存储库实现
public class SettingsRepository : ISettingsRepository
{
public List<string> GetIpAbuseList()
{
return DataAccess.Instance.Abuses.Where(p => p.TypeId == 1).Select(p => p.Source).ToList();
}
public List<string> GetSourceAbuseList()
{
return DataAccess.Instance.Abuses.Where(p => p.TypeId == 2).Select(p => p.Source).ToList();
}
}
我试图绑定存储库的类
public class ValidateAbuse
{
[Inject]
public ISettingsRepository Repository { get; set; }
public static ValidateAbuse Instance = new ValidateAbuse();
}