Внедрение зависимостей с параметрами

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 28.10.2017

Используемый при внедрении зависимостей объект 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 также принимает два параметра: название свойства и значение для него.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850