Я использую шаблон единицы работы в своем приложении mvc 3 с Ninject. Я столкнулся с проблемой, когда у меня возникли проблемы с ее решением без использования нового или какого-либо другого местоположения службы.
Я использую абстрактную базовую модель под названием MyModel
, которая имеет 2 конкретных подкласса MyModel1
и MyModel2
. Их необходимо отправить в представление на основе значения, заданного в записи пользователя.
public class MyController : Controller
{
private IUnitOfWork _unitOfWork;
public MyController(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; }
...
public ActionResult MyMethod() {
var user = _unitOfWork.Get(user)
if (user.myprop == somevalue)
{
return View(new MyModel1());
}
return View(new MyModel2());
}
Это работает нормально (хотя мне это не нравится, это просто и работает. Проблема в том, что использование new является анти-паттерном при использовании Dependancy Injection. Кроме того, теперь я хочу, чтобы модели инициализировались самостоятельно (из базы данных ) поэтому мне нужно вставить IUnitOfWork
в конструктор моделей. Конечно, я мог бы сделать это:
if (user.myprop == somevalue)
{
return View(DependancyResolver.Current.GetService(typeof(MyModel1)));
}
Но расположение службы также является анти-паттерном.
Есть предложения, как это решить?