Я хочу обрабатывать различные типы документов одинаково в моем приложении
Следовательно:
У меня есть общий интерфейс, как это.
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 (или какую-то другую среду), для внедрения зависимости, чтобы через конфигурацию решить, хочу ли я использовать Crystal, Reportingservices
или List and Label.
Когда я указываю свое сопоставление, я могу ввести свой ChrystalReportHandler
, но как я могу ввести T на левой стороне или в лучшем слове Тип ReportDocument
.
IReportHandler<T (this needs also to be injected)> = IOContainer.Resolve(MyMappedType here)
моя проблема - это левый сайт, конечно, потому что он связан с типом, но у меня есть мое отображение ... можно ли сгенерировать объект на основе отображения и назначить отображаемый тип? или в основном вводят Т на левую сторону тоже?
Или этот подход не подходит для этой ситуации.