問題
DryIoc を使用してシングルトンを登録しようとしていますが、コンテナーがシングルトン クラスの複数のインスタンスを返しています。singleton クラスは、複数の異なるサービス インターフェイスの実装タイプとして登録されます。前述のサービス インターフェイスのいずれかが DryIoc から要求された場合、シングルトン クラスの同じインスタンスが返されることを期待していますが、そうはならず、その理由がわかりません。
例
これが私がやろうとしていることの基本的な例です。この例では、インターフェイスおよびFoo
のシングルトン実装として使用したいクラスがあります。つまり、またはがコンテナから解決されたときに、 の同じインスタンスが返されるようにしたいと考えています。IFoo
IBar
IFoo
IBar
Foo
サービス インターフェイス
interface IFoo
{
}
interface IBar
{
}
シングルトン (実装) クラス
class Foo : IFoo, IBar
{
}
テスト
Container container = new Container();
container.Register<IFoo, Foo>(Reuse.Singleton);
container.Register<IBar, Foo>(Reuse.Singleton);
object foo = container.Resolve<IFoo>();
object bar = container.Resolve<IBar>();
Assert.AreSame(foo, bar); // Why does this fail?
考えられる解決策
DryIoc のRegisterInstance
メソッドを使用することを検討しましたが、それにはクラスを手動で作成する必要があり、上記の単純化された例とは異なり、実際のクラスには独自の依存関係があるため、それを回避しようとしています。