1つしかないインスタンスをInjectする方法が分からない

メモ

問題

次のようなFooクラスのInitialize()メソッドで、シングルトンを生成する場合を考えます。

public class Foo : IFoo, IInitializable
{
     [Inject] private IFactory<int, IBoo> booFactory;
     private int num = 5;

     void Initialize(){
          booFactory.Create(num);
     }
}

public interface IFoo
{

}

ここで、1つだけ存在するBooインスタンスを次のようなHogeクラスのフィールドbooに注入しようとした時、上手くいきません。

public class Hoge
{
     [Inject] private IBoo boo;
}

Installerはこんな感じ。

Container.BindIFactory<int, IBoo>().To<Boo>.AsSingle();
Container.Bind<IBoo>().To<Boo>().AsSingle();

これだと二箇所でAsSingle()を宣言してしまっているので、この時点で上手くいかないのは僕でも分かります。 しかしそれではどうしたら良いのか...

強引な解決法

public class Foo : IFoo, IInitializable
{
     [Inject] private IFactory<int, IBoo> booFactory;
     private int num = 5;
     public IBoo boo {get; set;}

     void Initialize(){
          boo = booFactory.Create(num);
     }
}

public interface IFoo
{
     IBoo boo {get; set;}
}
public class Hoge
{
     [Inject] private IFoo foo;
     private IBoo boo;

     void Initialize()
     {
          boo = foo.boo;
     }
}
Container.BindIFactory<int, IBoo>().To<Boo>.AsSingle();
Container.BInd<IFoo>().To<Foo>().AsSingle();

これでHogeクラスのbooにBooのインスタンスが入るので、やりたいことは実現できたことになります。

でも、HogeがBooのインスタンスを手に入れるためにFooを仲介しなきゃいけない所がなんだか気持ち悪い感じがします...

もっと上手くやる方法はないのでしょうか...