.net скомпилированные выражения вместо activator.createinstance()
Я сканирую свои сборки в поисках определенных типов typeof(MyInterface<>), а затем добавляю эти типы в статический словарь, чтобы при необходимости можно было создавать экземпляры этих типов.
Я создаю эти типы с помощью Activator.CreateInstance. Но потом я заметил плохую производительность и исследования показали мне http://mattgabriel.co.uk/2016/02/12/215/
Теперь я сохраню скомпилированную лямбду в словаре
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 ответ
Проблема была с "Делегатом". Вместо этого я использовал конкретный тип;
_store = new ConcurrentDictionary<string, Creator>();
это позволило мне просто вызвать конструктор как;
var createMe = store["creatorkey"]
createMe(param1,....)