我对 Ninject 还很陌生,但我已经成功地使用自定义提供程序将它用于 DI。
绑定初始化如下
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 的实例(再次使用构造函数注入(如果可能))。链条的第一部分有效,第二部分无效。