2013-08-05 9 views
1

Я использую Unity Application Block вместе с UnityMvc. У меня есть контроллер с именем HomeController, который имеет действие:Единство: для этого объекта не задан конструктор без параметров

public ActionResult Add(UnitOfWork UnitOfWork) 
    { 
     Person p = new Person(); 
     p.Code = "1202"; 
     p.City = new City() { Code = "21", Name = "Paris" }; 
     UnitOfWork.Save(); 

     ViewBag.Message = "Done."; 

     return View(); 
    } 

параметр UnitOfWork имеет конструктор так:

public UnitOfWork(Context Context) 
    { 
     this.context = Context; 
    } 

и "Сохранить" Метод:

public void Save() 
    { 
     this.context.SaveChanges(); 
    } 

когда единство пытается для создания объекта UnitOfWork для действия «Добавить» возникает следующая ошибка:

Нет конструктора без параметров, определенного для этого объекта.

Кажется, что UnitOfWork является параметром для действия «Добавить», он должен иметь конструктор без параметров.

Действительно ли это или любое тело имеет решение?

+0

Просьба показать ваш конструктор. Также обратите внимание, что вы обычно не можете и не должны вводить услуги с помощью методов действий. Вместо этого вы должны использовать конструктор. – Steven

+0

Да, проблема была в отсутствии конструктора. Модельное связующее отвечает за построение объектов параметров действия. – user2653400

+0

Вы можете написать свой собственный ModelBinder, чтобы создать тип, который не имеет конструктора без параметров. –

ответ

1

Сцепление модели MVC заботится о том, чтобы вводить значения в методы действия. Без регистрации специально созданного пользовательского связующего устройства Unity (или любой контейнер DI в этом отношении) не будет внедрять службы в методы действий.

Unity (и другие контейнеры DI) только внедряет службы в конструктор типа, и это рекомендуемый способ осуществления инъекции зависимостей.

Смежные вопросы