2013-08-05 88 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容器)只將服務注入到類型的構造函數中,這是執行依賴注入的通知方式。

相關問題