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

时间:2017-11-15 10:22:06

标签: .net lambda activator createinstance

我扫描我的装配体寻找特定类型 typeof(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 []”类型。

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

问题在于“代表”。相反,我使用了具体类型;

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

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

var createMe = store["creatorkey"]
createMe(param1,....)
相关问题