Я хочу одинаково обрабатывать различные типы документов в своем приложении. Поэтому: у меня есть такой общий интерфейс.
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 на левом сайте... Поскольку я должен использовать С# 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)
моя проблема - это левый сайт, конечно, потому что он связан с типом, но у меня есть свое сопоставление ... можно ли создать объект на основе сопоставления и назначить сопоставленный тип? или в основном также вводить Т с левой стороны? Или этот подход не подходит для данной ситуации.