Castle windsor:如何使用一个实现实例注册两个服务?

INs*_*INs 3 castle-windsor castle

如何使用一个实现实例注册两个服务?我用了:

 _container.Register(Component.For(new [] { typeof(IHomeViewModel), typeof(IPageViewModel) }).
            ImplementedBy(typeof(HomeViewModel)).Named("IHomeViewModel").LifeStyle.Singleton)
Run Code Online (Sandbox Code Playgroud)

但是上层代码注册了HomeViewModel的两个实例.

Mau*_*fer 7

这正是做到这一点的方式.请参阅文档中的" 类型转发 ".它注册了一个可通过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>());
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,您可能想要使用泛型而不是所有这些typeof,并且还删除了生活方式声明,因为单例是默认值:

container.Register(Component.For<IHomeViewModel, IPageViewModel>()
                            .ImplementedBy<HomeViewModel>());
Run Code Online (Sandbox Code Playgroud)