У меня есть контроллер, который принимает DbContext
, а тот, кто этого не делает. Т.е. ,:Как использовать конструктор с параметрами от одного без параметров
public CalendarController()
{
var db = new DbContext();
CalendarController(db); // <= Not allowed
}
public CalendarController(IDbContext db)
{
_calendarManager = new CalendarManager(db);
_userManager = new UserManager(db);
_farmingActionManager = new FarmingActionManager(db);
_cropManager = new CropManager(db);
}
К сожалению, выше, дает ошибку на линии CalendarController(db)
:
Выражение обозначает «тип», в котором, как ожидалось а «переменная», «значение» или «метод group`
Можно ли назвать один конструктор из другого? Я не хочу дублировать весь код.
Видимо, вы пытаетесь внедрить анти-шаблон Bastard. Нет! не делайте этого. –
@SriramSakthivel Не могли бы вы объяснить, что такое Bastard Injection Anti-Pattern? Я делаю это таким образом, так как мне нужен тот же экземпляр DbContext для экземпляра контроллера, я не нашел лучшего решения. 'autofac' был многообещающим, но он по-прежнему выдавал ошибку при использовании нескольких экземпляров DbContext в одном запросе. –
Вы полностью не понимаете DI. когда вы используете ключевое слово 'new', за исключением корня композиции (объекты-значения - исключение), вы нарушаете DI. Вы обновляете «CalendarManager», «UserManager» и т. Д., Которые вы должны действительно воспринимать как параметр конструктора (как некоторый интерфейс). Тем не менее, Bastard Injection - это то, что происходит, когда зависимость является Foreign Default (реализована в другой сборке), которая была введена по умолчанию. 'DbContext' - иностранная зависимость (я считаю); вы не должны быть тесно связаны с потребителем с зависимостью в другой сборке. –