用参数初始化未知类型的最佳方式

本文关键字:最佳 方式 类型 未知 参数 初始化 | 更新日期: 2023-09-27 18:27:43

我试图通过能够实例化从基类继承的对象来泛型我们的一些代码,而不知道这些对象的类型。所以我只想能够把dll放在目录中,并能够实例化这些对象。

我正在研究MEF,但我无法导出参数,因为它们没有在代码中定义(从数据库加载)。因此,看起来MEF并不是一条可行之路。

反射效果很好,但这似乎太脆弱了,无法依赖。

是否有我遗漏的东西可以让我用MEF做到这一点,是否有另一个框架可以让我做得更好,或者反思只是这里的答案?

用参数初始化未知类型的最佳方式

如果你只想从一个你什么都不知道的dll(程序集)中派生实例,可以尝试这样做:

_binaryData = File.ReadAllBytes(_path);
temporary   = Assembly.Load(_binaryData);
foreach (Type type in temporary.GetTypes().Where(x =>  typeof(IBase) ).IsAssignableFrom(x))
    var istance = (IBase) FormatterServices.GetUninitializedObject(x)

我不建议这样做,我建议另一种方法,在加载之前在该dll上存储辅助信息,或者使用dll类型上的属性来帮助进行分析(然后加载)。