私は、どのジェネリック関数が呼び出されたかに基づいてクラスを返すファクトリを実装しようとしています。genericに基づいたファクトリリターン型
InvoiceRepository repo = RepositoryFactory.GetInstance<Invoice, InvoiceRepository>();
これは動作しますが、私はむしろ戻り値の型を宣言する必要はありませんと思います。このようにそれを呼び出す
public static TRepository GetInstance<T, TRepository>()
where TRepository : IRepository<T>, new()
{
return new TRepository();
}
:
は、私は現在、それはこのように取り組んできました。InvoiceRepository repo = RepositoryFactory.GetInstance<Invoice>();
それは本当に重要ではないが、それは私を悩ませていますし、任意の明白な解決策があるかどうか、私は好奇心が強い:私はこのようにそれを呼び出すしたいと思います。
どのタイプの工場は建設すべきか? 'IRepository'インターフェースを実装するタイプのためにロードされたアセンブリを検索すべきでしょうか? –
これは修辞的な質問であるかどうかはわかりませんが、IRepositoryの実装を返す必要があります。 e:私はまだ学生ですが、他人には明白なことを少し気にしません。 –
ihendriks
異なる 'T'とそれに対応するリポジトリタイプの間でマップするプライベートディクショナリ(' Dictionary ')を工場で作成することができます。次に、リポジトリの構築を依頼されると、ディクショナリを使用してリポジトリのタイプを取得し、リフレクションを使用してリポジトリタイプを構築できます。 –