Замените код Ninject на Simple Injector

Я нашел этот пост Заменить Ninject на простой инжектор

но не нашел решения для следующих миграций. С Нинжектом:

public class ServiceClass : IServiceClass
...
IKernel kernel
...
this.kernel.Bind<IServiceClass>().ToMethod(context => this);

Я пытаюсь использовать эту конструкцию с Simple Injector:

public class ServiceClass : IServiceClass
   ...
   Container container
   ...
   this.container = container;
   this.container.Register<IServiceClass>(() => container.GetInstance<ServiceClass >());

это равно Ninject один?

Вторая часть в Ninject это:

public void BindSomeCallback(DelegateNumberOne delegateNumberOne)
{        
   this.kernel.Rebind<DelegateNumberOne>().ToConstant(delegateNumberOne);
}

to:

public void BindSomeCallback(DelegateNumberOne delegateNumberOne)
{ 
   this.container.Register<DelegateNumberOne, delegateNumberOne>();
}

person MikroDel    schedule 25.09.2013    source источник
comment
Почему регистрация ServiceClass помещается в этот класс, а не в Корень композиции?   -  person Steven    schedule 25.09.2013
comment
@Steven, этот ServiceClass является своего рода точкой входа - и имеет 2 конструктора - один для работы с тестовыми костюмами - зависимости, подготовленные для тестов, и другой рабочий код.   -  person MikroDel    schedule 25.09.2013
comment
Часть устаревшего кода @Steven Delphi запускает часть .NET, которую я показал здесь.   -  person MikroDel    schedule 25.09.2013
comment
Я настоятельно рекомендую вам не разбрасывать свою регистрацию DI по всей базе кода и не допускать, чтобы ваше приложение зависело от вашего контейнера. Разместите все регистрации в одном месте (ваш корень композиции).   -  person Steven    schedule 25.09.2013
comment
@Steven ServiceClass - это одно место   -  person MikroDel    schedule 25.09.2013
comment
Это единственное место, где производятся все регистрации? Но почему вы регистрируете сам этот класс?   -  person Steven    schedule 25.09.2013
comment
@Steven Спасибо за ваш ответ - я проголосовал и принял его - я отвечаю на ваш комментарий, почему вы регистрируете сам этот класс? чуть позже =)   -  person MikroDel    schedule 25.09.2013
comment
@Steven - ты единственный разработчик Simple Injector? - Я имею в виду не тех, кто его использует, а тех, кто разрабатывает его как инструмент   -  person MikroDel    schedule 25.09.2013
comment
Это команда.   -  person Steven    schedule 25.09.2013
comment
@Стивен не очень большой =(   -  person MikroDel    schedule 25.09.2013
comment
Да, это печально, но факт. Но я считаю, что это верно для всех контейнеров IoC. Большую часть работы обычно выполняет один разработчик.   -  person Steven    schedule 25.09.2013


Ответы (1)


это равно Ninject один?

Неа. Это:

this.container.Register<IServiceClass>(() => this);

Но поскольку вы фактически регистрируете синглтон, вам лучше написать его следующим образом:

this.container.RegisterSingle<IServiceClass>(this);

Вторая часть в Ninject это:

Опять же, вы хотите зарегистрировать делегата как синглтон:

this.container.RegisterSingle<DelegateNumberOne>(delegateNumberOne);
person Steven    schedule 25.09.2013