我有以下具有泛型類型參數的類。使用結構圖替換泛型類型參數中的抽象類型
public class ContentService<T> : IContentService where T : DataString, new()
{
public ContentService(IEnvironment environment,
ILogger logger)
{
_environment = environment;
_logger = logger;
}
...
}
DataString是一個抽象類,我想構造圖使用的具體實現(XmlDataString)每當我的應用程序創建的contentService的一個實例。結構地圖已經被注入IEnvironment和ILogger的具體實現時,我這樣做:
版本1:
_contentService = ObjectFactory.GetInstance<ContentService<DataString>>();
...但是當我步,是contentService的用DataString的類型參數,而不是創建XmlDataString。我在web.config中這三個條目設置默認實例:
- IEnvironment - > TestEnvironment
- ILogger - > Log4NetLogger
- DataString - > XmlDataString
結構地圖網站有this要說泛型,但我似乎無法將這個例子與我的實際問題聯繫起來。
這種方法的工作原理,但我失去的構造函數的參數自動佈線,它看起來很醜陋: 版本2:
Type typeOfDataString = ObjectFactory.GetInstance<DataString>().GetType();
Type genericClass = typeof(ContentService<>);
Type constructedClass = genericClass.MakeGenericType(typeOfDataString);
_contentService = (IContentService)Activator.CreateInstance(constructedClass,
ObjectFactory.GetInstance<IEnvironment>(),
ObjectFactory.GetInstance<ILogger>());
誰能告訴我什麼,我做錯了第一版本,還是我可能會改進第二版本?
如果你打電話'ObjectFactory.GetInstance()'會發生什麼?如果這不起作用,您不能將IContentService→ContentService 添加到您的web.config中嗎? –
svick
2012-04-04 01:15:33
謝謝@svick,工作。我只是注入整個服務。我能做到這一點的代碼: 'x.For()使用>();' ,但我一直沒能找出如何把在web.config中。 (編碼< & >不工作) –
mafue
2012-04-04 16:36:08