Регистрация динамически загружаемых 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()
)