Я довольно новичок в Injection Dependency, и я ищу советы по лучшим практикам. Извините, если это было задано раньше, но я пока не смог найти хорошее решение.MVC/Ninject Injection Dependency in business
Предположим, у меня есть веб-приложение MVC4 и отдельный бизнес-уровень. Приложение MVC уже настроено с использованием пакета Ninject NuGet, поэтому у меня есть NinjectWebCommon, и он отлично работает.
Мой вопрос: Как я могу использовать Ninject, когда мне нужны зависимости, установленные в других слоях?
Предположим, у меня есть этот репозиторий:
public class WidgetRepository : IWidgetRepository
{
// using an entity framework db context.
WidgetDbContext context = new WidgetDbContext();
public IQueryable<Widget> Widgets
{
get
{
return context.Widgets;
}
}
}
Каждый виджет возвращается в хранилище необходимо выполнить расчеты с использованием объекта калькулятора, что мне нужно впрыснуть:
public class Widget
{
// how can I get Ninject to inject a calculator object
// when Widgets are loaded form the database?
public ICalculator calculator;
public int MyValue { get; set; }
public int CalculateSomething
{
get
{
return calculator.Calculate(MyValue);
}
}
}
Что является лучшей практики для вставлять ICalculator в каждый экземпляр Widget, когда Ninject настроен в веб-приложении MVC, но объекты Widget создаются в бизнес-слое?
Нет, как виджет и хранилище находится в бизнес-уровне, поэтому мне интересно, как я мог бы привнести ICalculator экземпляр в виджет, когда виджет создается на бизнес-уровне, но настройка Ninject находится в проекте MVC. – matk
Ответ отредактирован, чтобы отразить ваш ответ –
Я не могу заставить это работать. Как код, который создает экземпляр виджета (в моем случае, репозиторий с использованием EF5), знает, что в проекте MVC существует ниндзетная конфигурация? Я мог видеть, как это будет работать, если бы у меня была ссылка на ядро Ninject на бизнес-уровне, но из того, что я слышал, это считается плохой практикой. – matk