2012-02-09 4 views
0

Caliburn.Microの電話コンテナを置き換えるための基本的なninjectコンテナを構築しています。これは、複数のプロジェクトに対して1つのIoCコンテナを使用するためです。 INavigationServiceとIPhoneServiceは同様の匿名メソッドにバインドされている理由私は理解していない部分があるこのninjectバインドの動作を理解する

public void RegisterPhoneServices(bool treatViewAsLoaded = false) 
    { 
     var _phoneService = new PhoneApplicationServiceAdapter(_rootFrame); 
     var _navigationService = new FrameAdapter(_rootFrame, treatViewAsLoaded); 

     _kernel.Bind<INavigationService>().ToMethod(x => _navigationService); 
     _kernel.Bind<IPhoneService>().ToMethod(x => _phoneService); 

     _kernel.Bind<IEventAggregator>().To<EventAggregator>().InSingletonScope(); 
     _kernel.Bind<IWindowManager>().To<WindowManager>().InSingletonScope(); 

     _kernel.Bind<TaskController>().ToSelf().InSingletonScope(); 

     var _taskController = Kernel.Get<TaskController>(); 
     _taskController.Start(); 
    } 

:プラスその楽しみは...

方法の一つは、このようになりますどの電話サービスに登録しています彼らは標準的な拘束ではなく、あります。

私は、これはあなたが既にのためのインスタンスを定義しているオブジェクトにバインドするための正しい方法であるため、理由があると思い(上記の行の場合のように)が、私は、コードを見て、どのようなことを知らない嫌いそうです。私は私の前提で正しいですか?

答えて

1

deanvmc、

要約:はい、そうです。

Ninjectファクトリメソッドを使用しています(http://bit.ly/AB9Eg9を参照)。工場ではあなたのケースでどんな種類のINavigationServiceも返品することができます。PhoneApplicationServiceAdapter

乾杯!

+0

甘い、歓声私はコードを見て、私はそれが何をしていたかはかなり確信していたが、私は本当にそれを使用する前に確かめたかった。 – deanvmc

1

これを行うより良い方法は、_kernel.Bind<INavigationService>().ToConstant(_navigationService)を使用することです。これにより、毎回同じオブジェクトを返すFuncを呼び出す必要がなくなり、バインディングをキャッシュすることができます。

関連する問題