我對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