作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的应用程序中以相同的方式处理不同类型的文档
所以:
我有一个像这样的通用接口(interface)。
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();
IDocumentHandler<ReportDocument> docProc = container.resolve("FinanceDocumentProcessor());
IReportHandler<T>
(将与上述相同)此处理程序提供处理报告文档的所有功能。
ChrystalReportHandler:IReportHandler<CrystalReportDocument>
Reportingservices
或列表和标签。
ChrystalReportHandler
但是我怎样才能在左侧或更好的词中注入(inject) T 类型
ReportDocument
.
IReportHandler<T (this needs also to be injected)> = IOContainer.Resolve(MyMappedType here)
最佳答案
我认为使用您当前的设计,您正在创建 IDocumentHandler
之间的“依赖关系”。和一个特定的文档( ReportDocument
或 MediaDocument
),所以如果你想使用 IDocumentHandler<ReportDocument or MediaDocument>
直接在您的代码中,您必须假设您的容器会为您提供。在这种情况下,容器不应该负责解析文档类型。
你会考虑像这样改变你的设计吗?
public interface IDocumentHandler
{
IDocument Document { get; set; }
void Load(IDocument doc);
void Load(string PathToDoc);
void Execute();
void Execute(IDocument doc);
}
public class IDocument { }
public class ReportDocument : IDocument { }
public class MediaDocument : IDocument { }
public class FinanceDocumentProcessor : IDocumentHandler { }
public class MarketingDocumentProcessor : IDocumentHandler { }
关于inversion-of-control - 泛型类型依赖注入(inject) : How to inject T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355473/
我是一名优秀的程序员,十分优秀!