Как зарегистрировать две службы с одним экземпляром реализации? Я использовал:Замок Windsor: Как зарегистрировать две службы с одним экземпляром реализации?
Но верхний код регистрирует два экземпляра HomeViewModel.
Как зарегистрировать две службы с одним экземпляром реализации? Я использовал:Замок Windsor: Как зарегистрировать две службы с одним экземпляром реализации?
Но верхний код регистрирует два экземпляра HomeViewModel.
Это именно то, как это сделать. См. «Type Forwarding» в документах. Он регистрирует один логический компонент, доступный через IHomeViewModel или IPageViewModel. Следующий тест проходит:
public interface IHomeViewModel {}
public interface IPageViewModel {}
public class HomeViewModel: IHomeViewModel, IPageViewModel {}
[Test]
public void Forward() {
var container = new WindsorContainer();
container.Register(Component.For(new[] {typeof (IHomeViewModel), typeof (IPageViewModel)})
.ImplementedBy(typeof(HomeViewModel)).Named("IHomeViewModel").LifeStyle.Singleton);
Assert.AreSame(container.Resolve<IHomeViewModel>(), container.Resolve<IPageViewModel>());
}
BTW вы можете использовать дженерики вместо всех этих typeof
, а также удалить объявление образ жизни, так как синглтон по умолчанию:
container.Register(Component.For<IHomeViewModel, IPageViewModel>()
.ImplementedBy<HomeViewModel>());
также, если вы не используя имя компонента (вы только когда-либо разрешаете его по типу и не используете его как переопределенное имя в любом месте), вы также можете удалить его. –
Спасибо, проблема была в моем коде. – INs