.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,....)
Другие вопросы по тегам