2012-02-09 3 views
0

Я создаю базовый контейнер ninject для замены контейнера телефона в Caliburn.Micro, поскольку я хочу придерживаться одного контейнера IoC для нескольких проектов. Плюс его весело ...Понимание того, что делает это связывание 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(); 
    } 

Часть я не понимаю, почему INavigationService и IPhoneService являются переплетены анонимными методами, такими как они, а не стандартная привязка.

I THINK Причина в том, что это правильный способ привязки к объекту, для которого вы уже определили экземпляр (как это имеет место в строках выше), но мне не нравится видеть код и не знаю, что это делает. Правильно ли я в своем предположении?

ответ

1

deanvmc,

коротко: да, вы правы.

Вы используете заводской метод Ninject (см. http://bit.ly/AB9Eg9). Завод может вернуть любой вид INavigationService в вашем случае вы просто хотите вернуть свой существующий PhoneApplicationServiceAdapter

Приветствия!

+0

Sweet, cheers, Когда я просмотрел код, я был уверен, что это то, что он делает, но я действительно хотел быть уверенным, прежде чем использовать его. – deanvmc

1

Лучшим способом для этого было бы использовать _kernel.Bind<INavigationService>().ToConstant(_navigationService). Это позволит привязать привязку кэш-памяти, а не к вызову Func, который каждый раз возвращает один и тот же объект.

Смежные вопросы