繁体   English   中英

如何增加对现有温莎城堡注册的依赖?

[英]How to add dependency to existing Castle Windsor registration?

我们有一堆控制器,通过BasedOn查询向Castle注册。 我们想在其中一个控制器上添加一个额外的配置依赖项。 我们可能会向所有控制器注册该参数。 以下代码是我们如何解决该问题的方法,但是我想知道是否存在更优雅/内置的解决方案。

public class ControllersInstaller : IWindsorInstaller
{
    private readonly IAppConfig _appConfig = new AppConfig();
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(FindControllers().Configure(ConfigureComponentRegistration).LifestyleTransient());

        container.Register(Component.For<BarController>()
            .LifestyleTransient()
            .DependsOn(Dependency.OnValue("faxNumber", 
            _appConfig.GetAppSetting<string>("FaxNumber"))));
    }

    private void ConfigureComponentRegistration(ComponentRegistration obj)
    {
        obj.LifestyleTransient();
    }

    private BasedOnDescriptor FindControllers()
    {
        return Classes.FromThisAssembly()
            .BasedOn<IController>()
            .If(Component.IsInSameNamespaceAs<FooController>(true))
            .If(t => t.Name.EndsWith("Controller") && t.Name != "BarController")                
            .LifestyleTransient();
    }
}

我建议您简单地使用一个更具体的版本覆盖现有注册,该版本具有来自_appConfig的必要依赖关系。 因此,您不必使用此过滤器:

t.Name != "BarController"

在这里查看我的答案,以了解如何覆盖现有组件: https : //stackoverflow.com/a/37832194/644891

完全可以,只需使用ConfigureFor<>方法

container.Register(FindAllControllers()
   .ConfigureFor<BarController>(x =>
      x.DependsOn(Dependency.OnAppSettingsValue("faxNumber"))
   )
);

正如我要指出的那样,我不确定为什么您的示例将生存期指定为三倍。 一次就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM