Регистрация динамически загружаемых DLL с помощью Castle Windsor - PullRequest
0 голосов
/ 29 октября 2018

У меня есть этот кусок кода в конструкторе класса.

        rules = rulesEngineRepository.GetRules(x => x.Enabled);
        foreach (var rule in rules)
        {
            var ruleAssembly = Assembly.LoadFrom($"{rule.AssemblyName}.dll");
            kernel.Register(Component.For(ruleAssembly.GetType()).LifestyleSingleton());
        }

Оператор Assembly.LoadFrom () работает должным образом и правильно загружает сборку, но следующий вызов kernel.Register () не регистрирует компонент.

Когда к нему обращаются позже, Castle.Windsor взрывается с «не удалось активировать» и внутренним исключением «Нет компонента для поддержки службы ...». Очевидно, что компонент не зарегистрирован.

Может ли кто-нибудь указать, где я здесь не так? Спасибо.

1 Ответ

0 голосов
/ 31 октября 2018

Component.For(ruleAssembly.GetType()) создаст компонент для System.Reflection.Assembly. Я предполагаю, что вы хотели иметь что-то, используя ruleAssembly.GetExportedTypes() или что-то вроде:

container.Register(
  Classes.FromAssembly(ruleAssembly)
    .FurtherConfigurationHere()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...