.net 编译表达式而不是 activator.createinstance()
.net compiled expressions instead of 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 });
我得到的错误是:
Object of type 'Microsoft.Extensions.Configuration.ConfigurationRoot' cannot be converted to type 'System.Object[]'.
可能是什么问题?
问题出在 "Delegate"。相反,我使用了具体类型;
_store = new ConcurrentDictionary<string, Creator>();
这让我可以将构造函数调用为;
var createMe = store["creatorkey"]
createMe(param1,....)
我扫描我的程序集以寻找特定类型 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 });
我得到的错误是:
Object of type 'Microsoft.Extensions.Configuration.ConfigurationRoot' cannot be converted to type 'System.Object[]'.
可能是什么问题?
问题出在 "Delegate"。相反,我使用了具体类型;
_store = new ConcurrentDictionary<string, Creator>();
这让我可以将构造函数调用为;
var createMe = store["creatorkey"]
createMe(param1,....)