@GKArnd

Как настроить ninject, чтобы можно было передавать ядру аргументы, которые использует конструктор класса?

Есть следующий код: класс прямоугольников(Rectangle) и класс Printer, реализующий функционал печати
class Rectangle
        {
            public IPrinter Printer { get; private set; }
            public int a { get; private set; }
            public int b { get; private set; }

            public Rectangle(IPrinter printer, int a, int b)
            {
                this.a = a;
                this.b = b;
                Printer = printer;
            }
        }

class Printer : IPrinter
        {
            public void Print() { }
        }

interface IPrinter
        {
            void Print();
        }

Kак настроить следующий класс
class Module : NinjectModule
        {
            public override void Load()
            {
                this.Bind<IPrinter>().To<Printer>();
            }
        }

Чтобы было возможно передать ядру параметры, которые использует конcтруктор класса Rectagle?
int a = 4, b = 3;
Rictagle r = ninjectKernel.Get<Rictagle>(a, b); //Возможно ли примерно такое решение?
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 1
0X12eb
@0X12eb
Используйте метод расширение WithConstructorArgument:

this.Bind<IRictagle>()
      .To<Rictagle>()
      .WithConstructorArgument("a", a)
      .WithConstructorArgument("b", b);

Если не хотите использовать параметры на уровне создания связей ядра - реализуйте свой провайдер:

abstract class NinjectProvider<T> : IProvider

Ну вообще получать экземпляр напрямую из ядра не ок, делайте сразу правильно, даже если это обучающий пример:
1. Создаем NinjectDependencyScope и реализуем интерфейс System.Web.Http.Dependencies.IDependencyScope.
2. Создаем NinjectDependencyResolver и реализуем интерфейс System.Web.Http.Dependencies.IDependencyResolver.
3. Создаем NinjectRegistrations и реализуем абстрактный класс Ninject.Modules.NinjectModule.

После этого класс сам подхватит зависимости из ядра и Вы сможете пользоваться своим экземпляром класса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы