向Castle Windsor注册动态加载的DLL

时间:2018-10-29 13:36:16

标签: castle-windsor nrules

我在类的构造函数中有这段代码。

        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 :(得分:0)

Component.For(ruleAssembly.GetType())将为System.Reflection.Assembly创建一个组件。我猜您想使用的是ruleAssembly.GetExportedTypes()或类似的东西:

container.Register(
  Classes.FromAssembly(ruleAssembly)
    .FurtherConfigurationHere()
)