オブジェクトをインスタンス化する汎用ルーチンをプログラム内に作成しようとしています。new Object() の呼び出しを実際に担当するルーチンは、インスタンス化する必要があるファクトリ内の別のアセンブリ内にあります。
namespace ExternalLib
{
class Object1Factory
{
public Object1 getObject1()
//...
}
class Object2Factory
// Same implementation as Object1Factory
}
適切なルーチンを呼び出してオブジェクトを「新規作成」できるルーチンをアプリケーションに提供しようとしています。
namespace MyApp
{
class Program
{
static void Main()
//...
static Object getNewObject(string typeName)
{
//This is where I have problems
}
}
}
外部ライブラリと自分のプログラムの両方のソース コードにアクセスできますが、アーキテクチャ全体を書き直すにはコストがかかりすぎます。
私が試したこと:私の最初のアイデアは、ファクトリおよび/またはファクトリルーチンでカスタム属性を使用し、リフレクションを使用してメソッドを取得してからメソッドを呼び出すことでした。私はもともと署名private static T getNew<T>()
を使用していて、型パラメーターで switch ステートメントを使用しようとしていましたgetNewObject(string typeName)
が、より簡単になることに気付きました。ファクトリには同じコンストラクタ シグネチャがありますが、継承リンクはありません。
要約すると、オブジェクトを作成するルーチンは別のアセンブリのファクトリにあります。これらのルーチンを自動的に呼び出して、型に基づいてオブジェクトを取得するにはどうすればよいですか?