Здравствуйте, я пытаюсь реализовать шаблон «ViewModelFactory», и мне было интересно, что это лучший способ его достижения, учитывая ограничения текущего контейнера IoC.ASP.NET Core и ViewModelFactory
public class UserCreateViewModelFactory
{
private readonly DbContext db;
public UserCreateViewModelFactory(DbContext db){ this.db = db;}
public void Create(CreateUserViewModel viewModel)
{
//Creates the user
}
}
У меня есть класс, который легко вводится в мои контроллеры ctor. Головная боль придет время, когда мне нужно больше ViewModelBuilders, поэтому я хочу, чтобы избежать двух вещей:
- Bloat CTOR с инъекциями
- Вздутие контейнер с регистрацией
Я хочу, чтобы иметь возможность вводить IViewModelFactory
на мой контроллер и затем использовать его как это:
[HttpGet]
public IActionResult GetUsers(int id)
{
return View(viewModelFactory.Build<GetUserViewModel>(id));
}
Обратите внимание, что при вызове Build(T)
он должен назвать правильный IViewModelFactory
осуществления.
Я знаю, что поддержка контейнера StructureMap привязывает конкретные реализации к соответствующему интерфейсу, но я пытаюсь найти решение без необходимости добавления другой зависимости от проекта.
Можете ли вы объяснить, почему вы хотите отвлечь создание моделей вида? Модель просмотра - это DTO; это то, что контроллер обычно должен обновлять сам. Обычно нет причин абстрагироваться от создания DTO. – Steven
Представьте, что у вас сложная модель просмотра. Разрешить этот код создания непосредственно в действиях ваших контроллеров просто плохо. Это тот же принцип, почему вы делегируете услуги для выполнения сложного бизнес-кода. Я нацелился на тонкие контроллеры здесь, поэтому действие должно выполняться очень мало, например, по просьбе пользователей и возвращению его результатов. –
Ваше приложение может извлечь выгоду из таких проектов, как [этот] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=92). – Steven