我对Ninject相当陌生,但我已成功设法将它用于使用自定义提供程序的DI。Ninject,Providers and Activator.CreateInstance
的结合被初始化如下
kernel = new StandardKernel();
kernel.Bind<IPatientRecordLocator>().ToProvider<PatientRecordLocatorProvider>();
,并在自定义提供我打电话Activator.CreateInstance像这样
protected override IPatientRecordLocator CreateInstance(IContext context)
{
var name = ConfigurationManager.AppSettings["PatientRecordLocator"];
var typeName = name.Split(',')[0];
var assemblyName = name.Split(',')[1];
return Activator.CreateInstance(assemblyName, typeName).Unwrap() as IPatientRecordLocator;
}
(是的,我知道,有没有错误处理,等在上面的代码:))
和所有这些工作就像一个魅力。
现在,我面临的问题是当我引入一个新的类,我想注入IPatientRecordLocator的实例。当我将如下构造函数添加到例如
[Inject]
public MockPatientRecordLocator (IContactAdapter contactAdapter)
{
...
}
然后将这些类之一,对Activator.CreateInstance工作,我也有一个参数的构造函数添加到类MockPatientRecordLocator,即
public MockPatientRecordLocator()
{
}
所以,我的问题是:如何才能让Ninject将一个实现IContactAdapter的类的实例注入到例如MockPatientRecordLocator?我试过方法注入,但无济于事。
我忘了解释,我想要实现的是一种链式注入,类PatientRecordSummary的一个实例被注入了一个MockPatientRecordLocator的实例(使用构造函数注入),并且所述的MockPatientRecordLocator实例应该注入一个IContactAdapter实例(再次使用构造函数注入(如果可能的话))。链条的第一部分起作用,第二部分不起作用。
鲁您好,感谢您的帮助(和恭维)。尝试最好的我可以:-)在这个特定的设置中,我没有使用模块,但我会切换到使用它们,这样我可以更容易地使用Bind()。 – norgie 2010-10-18 22:59:34