2013-08-05 89 views
1

我使用的Unity应用程序块与UnityMvc一起使用。我有一个控制器名为HomeController的是有一个动作:Unity:为此对象定义的无参数构造函数

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容器)只将服务注入到类型的构造函数中,这是执行依赖注入的通知方式。

相关问题