2012-09-14 56 views
3

我正在玩演示MVC 3互聯網應用程序模板,我安裝了ServiceStack.Host.Mvc NuGet包。我遇到了Funq執行構造函數注入的問題。構造函數注入與ServiceStack MVC Powerpack + Funq

下面的代碼片段是工作的罰款:

public class HomeController : ServiceStackController 
{ 
    public ICacheClient CacheClient { get; set; } 

    public ActionResult Index() 
    { 
     if(CacheClient == null) 
     { 
      throw new MissingFieldException("ICacheClient"); 
     } 

     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

下引發錯誤

無法創建接口的實例。

public class HomeController : ServiceStackController 
{ 
    private ICacheClient CacheClient { get; set; } 

    public ActionResult Index(ICacheClient notWorking) 
    { 
     // Get an error message... 
     if (notWorking == null) 
     { 
      throw new MissingFieldException("ICacheClient"); 
     } 

     CacheClient = notWorking; 

     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

這不是因爲公共財產注入作品一個巨大的交易,但我想知道我錯過了什麼。在第二個例子

+1

構造函數在哪裏?他們看起來和我一樣嗎? – mythz

+0

是的,我弄糟了一個非常糟糕的......我明顯地把ICacheClient接口放在action方法中,而不是構造函數。感謝@mythz指出。 –

回答

1

注意你沒有構造,但你確實有方法

public ActionResult Index(ICacheClient notWorking) 
{ 
    .... 
} 

,不會只工作構造函數和公共屬性注入。 您可以將其更改爲:

public class HomeController : ServiceStackController 
{ 
    private ICacheClient CacheClient { get; set; } 

    public HomeController(ICacheClient whichWillWork) 
    { 
     CacheClient = whichWillWork; 
    } 

    ... 
}