我想在我的应用程序中以相同的方式处理不同类型的文档因此:我有一个像这样的通用接口。
public interface IDocHandler<T>where T: class
{
T Document { get;set;}
void Load(T doc);
void Load(string PathToDoc);
void Execute();
void Execute(T doc);
}
对于不同类型的文档,我实现了这个接口。
例如:
public class FinanceDocumentProcessor:IDocumentHandler<ReportDocument>
{}
public class MarketingDocumentProcessor:IDocumentHandler<MediaDocument>
{}
然后我当然可以做这样的事情:
IDocumentHandler<ReportDocument> docProc= new FinanceDocumentProcessor();
知道如何在运行时注入 T 以使上面的行松散耦合会很有趣...
IDocumentHandler<ReportDocument> docProc = container.resolve("FinanceDocumentProcessor());
但我想根据配置决定我想要我的 FinanceDomcumentProcessor 还是我的 MarketingDocumentProcessor ......因此我也必须在左侧站点上注入 T ......因为我必须使用 c# 2.0 我不能使用魔法词“var”在这种情况下会有很大帮助......但是我怎样才能将它设计为开放和灵活......
很抱歉造成误解并感谢所有评论,但我有另一个挑战示例(也许我为此使用了错误的设计)......但我试一试:同样的情况但不同的解释
我有的示例图像:
ReportingService、Crystal、ListAndLabel 三种不同的报告文档类型。我有一个通用的处理IReportHandler<T>
程序(与上面的相同),这个处理程序提供了处理报告文档的所有功能。例如
ChrystalReportHandler:IReportHandler<CrystalReportDocument>
现在我想使用像 Unity(或其他一些框架)这样的框架进行依赖注入,以通过配置决定我是要使用 CrystalReportingservices
还是 List 和 Label。
当我指定我的映射时,我可以注入我的ChrystalReportHandler
,但我怎样才能在左侧注入 T 或者更好的词 The Type of ReportDocument
。
IReportHandler<T (this needs also to be injected)> = IOContainer.Resolve(MyMappedType here)
我的问题当然是左侧站点,因为它与类型耦合,但我有我的映射...是否可以基于映射生成对象并分配映射类型?或者基本上也将 T 注入左侧?还是这种方法不适合这种情况。