Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Используемый при внедрении зависимостей объект BookRepository был довольно простым. Немного усложним его, добавив конструктор с параметром:
public class BookRepository : IDisposable, IRepository { private BookContext db; public BookRepository(BookContext context) { db = context; } // определение методов }
Теперь при сопоставлении типов надо устанавливать аргумент, передаваемый в конструктор. Для этого используется метод WithConstructorArgument
.
Изменим в классе NinjectRegistrations метод Load:
public class NinjectRegistrations : NinjectModule { public override void Load() { Bind<IRepository>().To<BookRepository>() .WithConstructorArgument("context", new BookContext()); } }
Метод WithConstructorArgument принимает два параметра: название параметра конструктора и значение.
Подобным образом мы могли бы вынести контекст данных в репозитории в отдельное свойство:
public class BookRepository : IDisposable, IRepository { private BookContext db; public BookContext Context { get { return db; } set { db = value; } } public BookRepository() { } // определение методов }
Тогда установить нужное значение для свойства можно с помощью метода WithPropertyValue:
public class NinjectRegistrations : NinjectModule { public override void Load() { Bind<IRepository>().To<BookRepository>() .WithPropertyValue("Context", new BookContext()); } }
Метод WithPropertyValue также принимает два параметра: название свойства и значение для него.