アプリケーションでさまざまな種類のドキュメントを同じ方法で処理したい したがって、次のような汎用インターフェイスがあります。
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 3 つの異なるレポート ドキュメント タイプ。私は一般的なハンドラーIReportHandler<T>
(上記と同じ) を持っています。このハンドラーは、レポート ドキュメントを処理するためのすべての機能を提供します。例えば
ChrystalReportHandler:IReportHandler<CrystalReportDocument>
Reportingservices
ここで、Unity のようなフレームワーク (または他のフレームワーク) を依存性注入に使用して、Crystal を使用するか、リストとラベルを使用するかを構成によって決定したいと考えています。
マッピングを指定すると、 my を注入できますChrystalReportHandler
が、どのように T を左側に注入できますか、より良い言葉で言えば のタイプReportDocument
.
IReportHandler<T (this needs also to be injected)> = IOContainer.Resolve(MyMappedType here)
私の問題はもちろん左側のサイトですが、それはタイプに結合されていますが、マッピングがあります...マッピングに基づいてオブジェクトを生成し、マッピングされたタイプを割り当てることは可能でしょうか? または基本的に左側にもTを注入しますか?または、このアプローチはこの状況には適していません。