4

私は次のようなクラスを持っています...

public class Client<T> : IClient where T : IClientFactory, new()
{
    public Client(int UserID){}
}

およびIClientFactoryを実装する別のクラス

public class Client : IClientFactory

dllが参照されている場合は、これを簡単に実行してインスタンス化できます。

var data = new namespace.Client<namespace.OtherDLL.Client>(1);

しかし、ロードされたアセンブリでそれを行おうとすると、タイプがわからないため、明らかに失敗します。私はReflectionを使ってそれを行うために読み続けています。しかし、私はそれらのアイデアを実装しようとしましたが、失敗しました。これについての記事があります。 型オブジェクトをジェネリックメソッドに渡すことはできますか?

Assembly myDllAssembly = Assembly.LoadFile(project.Path + project.Assembly);

Type type = myDllAssembly.GetType("Migration.Application.Client");

var data = new namespace.Client<type>(1);

構成ファイルを使用して、クライアントの準備ができたときにDLLを簡単に削除し、構成ファイルを変更して機能させるようにしているので、これに関するヘルプは素晴らしいでしょう。

4

1 に答える 1

1

リフレクションを使用してメソッドを呼び出す必要があります。

var type = typeof(Client<>).MakeGenericType(type);
var data = (IClient)Activator.CreateInstance(type, 1)
于 2012-12-10T18:06:41.233 に答える