Я работаю над компонентом, который выполняет предварительный метод любого интерфейса, зарегистрированного в ioc, и момент выполнения зависит от разных триггеров. Он должен иметь возможность сохранять действия, которые необходимо выполнить, в базе данных, поэтому я сохраняю имя метода, тип и список параметров (сериализованных в BLOB) в базу данных до тех пор, пока они не понадобятся.
Когда возникает триггер, мне нужно выполнить метод для экземпляра типа. Поскольку я использую внедрение зависимостей, у меня есть имя интерфейса, сохраненное в базе данных (в формате "Namespace.IInterface, AssemblyName"
)
Чтобы запустить метод Resolve<IInterface>()
в контейнере ioc, мне нужен экземпляр его Type
:
Assembly assembly = System.Reflection.Assembly.Load(assemblyName);
Type service = assembly.GetType(typeName);
object instance = IOCContainer.Resolve(service);
Мои вопросы:
- Есть ли лучший способ получить экземпляр Type по его имени, если я уверен, что содержащая его сборка уже загружена в домен приложения? (я пытался использовать просто
Type.Load(typeName)
, но получил null) - Если рассматриваемая сборка уже загружена, будет ли CLR оптимизировать этот процесс (использовать уже загруженные) или мне нужно вручную кэшировать список сборок, чтобы предотвратить влияние на производительность многократной загрузки одной и той же сборки снова и снова?