3

実装の 1 つのインスタンスで 2 つのサービスを登録する方法は? 私が使用した:

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

しかし、上のコードは HomeViewModel の 2 つのインスタンスを登録します。

4

1 に答える 1

7

それはまさにそれを行う方法です。ドキュメントの「 Type Forwarding 」を参照してください。IHomeViewModel または IPageViewModel を介してアクセスできる 1 つの論理コンポーネントを登録します。次のテストに合格します。

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>());
}

ところで、シングルトンがデフォルトであるため、これらすべての代わりにジェネリックを使用しtypeof、ライフスタイル宣言を削除することもできます。

container.Register(Component.For<IHomeViewModel, IPageViewModel>()
                            .ImplementedBy<HomeViewModel>());
于 2010-09-30T15:19:07.200 に答える