У нас есть куча контроллеров, которые мы регистрируем в Castle через запрос BasedOn. Один из этих контроллеров мы хотели бы добавить дополнительную зависимость конфигурации. Возможно, мы могли бы зарегистрировать этот параметр со всеми контроллерами. Следующий код - это то, как мы работали над проблемой, но я хотел бы знать, есть ли более элегантное/встроенное решение.Как добавить зависимость от существующей регистрации Castle Windsor?
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();
}
}
В чем вы заботитесь об этом решении? –
Не стоит беспокоиться об одном экземпляре, но, если я получу больше, мне не нравятся дополнительные условия регистрации. Я решил, что есть способ переопределить существующие регистрации или расширить их, но не смог найти хороший способ. –