我已经在测试项目中安装了Ninject(v4.0.30319)包来测试。在下面创建测试代码,不幸的是ValidateAbuse.Instance.Repository始终为空。为什么Ninject不会将存储库绑定到ValidateAbuse.Repository属性? 你们中的一些人可能会建议使用构造函数绑定,但由于代码结构,我无法使用它。下面的代码只是示例,我需要找到绑定到属性的方法。Ninject属性绑定,如何正确
测试方法,它总是失败
[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();
}
那么如何创建ValidateAbuse类并使用注入库? – Tomas 2012-04-17 10:55:54
我已经阅读过这篇文章,但对目前的情况并没有帮助。你只是写了如何创建一个类的实例并绑定它。但如何获得实例?我有抽象类ConverterBase,我需要从该类访问单例ValidateAbuse实例。我无法使用ConverterBase构造函数来注入ValidateAbuse类。如果我用Inject属性添加属性,Ninject什么也不做。 – Tomas 2012-04-17 12:53:33
正如我所说的,这是因为你没有通过Ninject解决实例。您需要使用Ninject来创建需要解决依赖关系的实例。阅读本页https://github.com/ninject/ninject/wiki/The-Activation-Process – 2012-04-17 13:07:07