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);

但显然,如果我尝试使用已加载的程序集执行此操作,则会失败,因为它不知道类型。我一直在阅读以使用反射来做到这一点。但我尝试实施这些想法并失败了。这是一篇关于它的文章。 我可以将类型对象传递给泛型方法吗?

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 回答