Регистрация динамически загружаемых DLL с помощью Castle Windsor

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

        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 ответ

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

container.Register(
  Classes.FromAssembly(ruleAssembly)
    .FurtherConfigurationHere()
)
Другие вопросы по тегам