3
我有一個通用的接口:StructureMap和泛型 - 如何指定默認構造函數?
public interface IRepository<T> { ... }
我有一個這樣的實施方式:
public class Repository<T> {
public Repository<T>() { ... }
}
StructureMap(V 2.6.3)被配置是這樣的:
For(typeof(IRepository<>)).Use(typeof(Repository<>));
當我嘗試從StructureMap中抽取IRepository<Something>
,我按預期得到Repository<Something>
。 Hooray!
現在,我已經添加了第二個構造函數和實施看起來是這樣的:
public class Repository<T> {
public Repository<T>() { ... }
public Repository<T>(string database) { ... }
}
當我嘗試,並得到一個IRepository<Something>
現在,我得到一個例外,因爲它默認爲嘗試使用新帶參數的構造函數。 噓!
我怎樣才能改變我的StructureMap配置,以便它知道要使用參數的構造函數?
是啊,我發現,解決辦法......不過,我不希望有改變我的庫類,除非我真的要。將實現緊密結合到特定的IOC容器似乎很奇怪。 – NeilD
對於開放的泛型類型,沒有辦法做到這一點。作爲討厭的雜物,你可以使用CtorDependency來傳遞默認值,例如。x.For(typeof運算(IRepository <>))使用(typeof運算(存儲庫<>))CtorDependency( 「數據庫」)是(空);然後相應地處理它。什麼是數據庫字符串用於爲什麼你不想你的容器來實現它? –
非常有幫助,感謝羅布:) –