我有一個開放的通用接口,我用一個非泛型類實現,我想用城堡windsor注入這個類,但我掙扎着......使用城堡注入一個非通用實現的開放通用接口
可以說我有以下接口
public interface IMyInterface<T>
{
bool DoSomething(T param);
}
然後我有以下的類,它實現像這樣
public class MyClass : IMyInterface<string>
{
public bool DoSomething(string param)
{
// Do Something
return true;
}
}
這個界面我希望能夠ŧ o像這樣使用castle來解析接口,以便injectObject成爲MyClass的一個實例。
WindsorContainer container = new WindsorContainer(new XmlInterpreter(newConfigResource("castle")));
IMyInterface<string> injectedObject = container.Resolve<IMyInterface<string>>();
這是可能的,還是我有點偏離軌道?如果可能的話,我如何設置城堡配置部分?我已經嘗試使用'1表示法來表示接口是一個開放的泛型類型,但如果實現不是泛型的,那麼在這種情況下它不是泛型。
任何幫助表示讚賞
您是否確定要使用XML來註冊組件?目前的「最佳實踐」是用流利註冊API註冊組件,例如'container.Register(Component.For>()。ImplementedBy ())' –
mookid8000
2011-06-01 09:13:17
@ mookid8000這並不意味着如果我想改變一個接口的具體實現我想使用(比如說在真正的和虛假的DAO),我需要更改代碼並重新編譯?通過在城堡xml配置文件中,我可以更改配置並重新啓動服務或應用程序。 – Rob 2011-06-01 09:23:03
是的,這就是它的意思。根據我的經驗,人們往往傾向於認爲在運行時切換實現的能力很酷,但我從未聽說任何人將其付諸實際使用。 – mookid8000 2011-06-01 10:46:52