Путаница с использованием Ninject с использованием asp.net c # - PullRequest
0 голосов
/ 05 июня 2018

после долгих усилий в DI я наконец смог понять основы, но, насколько я знаю до сих пор, создание экземпляра или использование ключевого слова NEW в контроллере означает, что мы все еще не удовлетворяем DI, я создал небольшойпроект, чтобы указать на мою проблему:

public  interface IOperations
{
    int mul(int a, int b);
}

Реализация моего интерфейса:

 public class Operations:IOperations
{

  public  int mul(int a,int b){


        return a * b;

}
 }

В моем контроллере я создаю свой конструктор:

private IOperations _ioperations;

    public HomeController(IOperations _ioperations)
    {


        this._ioperations = _ioperations;
    }

Класс обработчика:

  public readonly IOperations _ioperation;

    public Handeler(IOperations _ioperation)
    {


        this._ioperation = _ioperation;

    }

Класс привязки:

 public class Binding:NinjectModule
{

    public override void Load()
    {


        Bind<IOperations>().To<Operations>();


        }
    }
}

и в конце мой контроллер:

 var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());
        var _operation = kernel.Get<IOperations>();


        var handler = new Handeler(_operation);
        var result=handler._ioperation.mul(5, 2);

Я скопировал их с сайта, который работает какс Ninject, для меня это выглядит очень странно, в моем контроллере, если вы видите, что я использую «новое» ключевое слово и создаем экземпляр, который, насколько я знаю, мы не должны делать, иначе какой смысл в DI? Кто-нибудь может мне объяснить?

1 Ответ

0 голосов
/ 05 июня 2018

Вместо инициализации в вашем контроллере вы должны использовать метод Application_Start () в файле Global.asax, чтобы зарегистрировать привязки, так как тогда нам не придется делать то же самое для каждого контроллера.Для полной реализации обратитесь по этой ссылке .

...