使用Activator最好的方法来创建具有多个构造函数的类的实例?

时间:2009-08-02 23:39:24

标签: c# reflection activator

我实现了一个'插件'系统,我的应用程序创建了在运行时实现接口以允许可插入功能的类。

我通过在插件程序集中实现指定接口的所有类上使用Activator.CreateInstance来实现此目的。

目前我只使用该类的一个实现,为此我有两个构造函数参数,并将它们包含在Activator.CreateInstance调用中:

 instanceList.Add((Foo)Activator.CreateInstance(_TypeList[typeKey], new object[] { arg1, arg2 }));

我意识到如果添加了不使用此构造函数签名的实现,这可能会导致以后出现问题。处理这个问题的最佳情况是什么。

通过文档明确说构造函数需要使用此签名,然后将其包含在try / catch中?

或者是否有办法调用类的构造函数?请记住,我必须以某种方式匹配构造函数参数。

或者......通过将参数放在静态类中作为静态属性来避免构造函数参数?

2 个答案:

答案 0 :(得分:1)

首先,我会重构代码以抽象构造来说工厂类。然后工厂使用的策略可以决定最佳方式(如果不同)以及在发生错误时如何处理 - 例如缺少构造函数。您可以使用泛型来根据需要强烈或松散地键入接口。

我会坚持使用Activator。我们已经用这种结构做了很多工作,它给我们带来了许多东西,包括基于运行时发现的类型的后期绑定,单例,类型别名,自定义安全性等。

答案 1 :(得分:1)

我要求所有插件都有一个没有参数的构造函数,并在接口中添加一个初始化方法,并附带一些常规参数。

无法知道插件的所有可能实现所需的参数。