我有以下具有泛型类型参数的类。使用结构图替换泛型类型参数中的抽象类型
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