.NET 编译的表达式而不是 activator.createinstance()



我扫描我的程序集以查找特定类型的类型(MyInterface<>(然后,我将这些类型添加到静态字典中,以便可以在请求时创建这些类型的实例。

我正在使用Activator.CreateInstance创建这些类型。但后来我注意到糟糕的表现,研究指出我 http://mattgabriel.co.uk/2016/02/12/215/

现在,我所做的是将编译的lambda存储在字典中

static IDictionary<string, Delegate> Store = new ConcurrentDictionary<string, Delegate>();

我卡住的地方是,当我让委托人通过以下方式创建实例时

Delegate instanceToCreate = DelegateStore.Store["keyName"];

然后我需要调用委托,该委托将通过将参数_configuration传递给构造函数来创建实例。我试过了;

instanceToCreate.DynamicInvoke(new object[] { _configuration });

我得到的错误是:

类型为"Microsoft.Extensions.Configuration.ConfigurationRoot"的对象不能转换为类型"System.Object[]"。

可能有什么问题?

问题出在"代表"上。相反,我使用了混凝土类型;

_store = new ConcurrentDictionary<string, Creator>();

这允许我将构造函数称为;

var createMe = store["creatorkey"]
createMe(param1,....)

最新更新