請考慮以下代碼。在Ninject中注入接口陣列
public interface IFoo { }
public class Bar
{
public Bar(IFoo[] foos) { }
}
public class MyModule : NinjectModule
{
public override void Load()
{
Bind<IFoo[]>().ToConstant(new IFoo[0]);
// ToConstant() is just an example
}
}
public class Program
{
private static void Main(string[] args)
{
var kernel = new StandardKernel(new MyModule());
var bar = kernel.Get<Bar>();
}
}
當我嘗試運行該程序時,出現以下異常。
錯誤激活的IFoo
的構造的參數FOOS
沒有匹配的綁定是可用的,並且類型不是自可綁定。
激活路徑:
2)依賴的IFoo注射到型酒吧
1)請求酒吧
如何可以注入/結合在Ninject數組?
謝謝你的時間。
編輯:
我的應用程序導入由第三方組件創建的數據。 導入過程應用不同類型的過濾器(例如,不同過濾器接口的實現)。過濾規則經常變化,但過於複雜,無法用純配置(和主過濾器)完成。
我想使添加/編輯過濾器儘可能簡單。我所擁有的是所有過濾器實現所在的程序集。我試圖將每個過濾器接口綁定到以下方法(它提供了該過濾器類型的每個實現的實例)。基本上我想避免在添加/刪除過濾器類時需要更改我的Ninject模塊。
private IEnumerable<TInterface> GetInterfaceImplementations<TInterface>(IContext context)
{
return GetType().Assembly.GetTypes()
.Where(t => typeof (TInterface).IsAssignableFrom(t) && IsConcreteClass(t))
.Select(t => Kernel.Get(t)).Cast<TInterface>();
}
我在繞過容器DI機制方面感覺有點內疚。這是一種不好的做法嗎?有做這種事情的普遍做法嗎?
決議:
我使用包裝類作爲bsnote建議。
我選擇這個答案,因爲它更詳細。謝謝(+1)給bsno也是! – 2010-06-24 14:12:18