Вопрос:
Как я могу настроить образ жизни своих компонентов, используя (или нет) интерфейс маркера на каждом из них?
Мои правила:
- , если компонент реализует IAutoInstalledComponent , тогда он должен быть зарегистрирован
- , если компонент реализует ISingletonComponent тогда жизненный цикл компонента должен быть Singleton
- , если компонент реализует IAutoInstalledComponent , но не ISingletonComponent он будет иметь PerWebRequest lifestyle
Я видел метод "If" в ComponentRegistration, указанном в ConfigureDelegate метода "Configure", но не смог угадать или получить документацию о том, как его использовать.
Мой текущий код:
// a marker interface which I implement on my components by convention
// just to know which components to register
public interface IAutoInstalledComponent
{
}
// a marker interface to say that the lifestyle should be Singleton
public interface ISingletonComponent : IAutoInstalledComponent
{
}
// This is my unique installer
public class AutoInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.BasedOn<IAutoInstalledComponent>()
// this is what i want to be Singleton when the component (or service) implements ISingletonComponent
.Configure(c => c.LifeStyle.PerWebRequest)
);
}
}
Контекст:
Хорошо, если у вас есть время, здесь глобальныйобъяснение того, что я пытаюсь сделать.Моя цель - сделать массовую регистрацию всех компонентов в текущей сборке.Но так как некоторые компоненты очень медленно инициализируются (и являются полностью потокобезопасными), я хочу создать только один их экземпляр.
Заранее спасибо за помощь.