Мы разрабатываем графический интерфейс графического интерфейса пользователя с использованием Catel.MVVM. Отдельные плагины должны загружаться динамически, используя атрибут «ServiceLocatorRegistration».Атрибуты автокаталога Catel с несколькими экземплярами
Пример:
[ServiceLocatorRegistration(typeof(IInitializable), ServiceLocatorRegistrationMode.SingletonInstantiateWhenRequired, "SamplePlugin")]
В нашем загрузчике мы загружаем все Plugin сборки в AppDomain по умолчанию:
Catel.Windows.Controls.MVVMProviders.Logic.UserControlLogic.DefaultSkipSearchingForInfoBarMessageControlValue = true;
Catel.Windows.Controls.MVVMProviders.Logic.UserControlLogic.DefaultCreateWarningAndErrorValidatorForViewModelValue = false;
IoCConfiguration.DefaultServiceLocator.AutoRegisterTypesViaAttributes = true;
IoCConfiguration.DefaultServiceLocator.CanResolveNonAbstractTypesWithoutRegistration = true;
foreach (
var file in
BaseDirectory.GetFiles("*.dll", SearchOption.AllDirectories)
.Where(f => IsNetAssembly(f.FullName))
.Where(f => !f.FullName.EndsWith("resources.dll"))
.AsParallel())
{
try
{
var asm = Assembly.ReflectionOnlyLoadFrom(file.FullName);
}
catch { }
}
Затем мы пытаемся инициализировать их по телефону
var initializables = ServiceLocator.Default.ResolveTypes();
foreach(var initializable in initializables)
initializable.Initialize();
Но даже если у нас есть сборки плагинов, загруженные в AppDomain, мы не получаем все классы с помощью ServiceLocatorRegistration на дань.
Должно ли быть разрешено все классы, у которых есть атрибут примера, как указано выше? Спасибо заранее!
Я попробую сделать это как можно скорее (1-й), но, как я написал, мы уже загружаем сборки в стандартную AppDomain. Я добавил соответствующий код в мой вопрос выше. Может быть, проблема в том, что мы загружаем сборки «ReflectionOnly»? – chrisih