2011-03-05 128 views
0

任何人都可以看到我在這裏做錯了嗎?我試圖學習如何具有規格/服務和域名項目,但在這種情況下,它是ASP.NET MVC。對象引用未設置爲對象錯誤的實例!

我在我的控制器中有以下代碼,但我沒有將對象引用設置爲下面一行代碼中的對象實例。我將不勝感激任何建議,我會出錯!?

// Error 
Line 22:    var profiles = _profileService.GetProfile(); 


// code below 

namespace Whitepages.Controllers 
{ 
[HandleError] 
public class HomeController : Controller 
{ 
    private readonly IProfileService _profileService; 

    public HomeController(IProfileService profileService) 
    { 
     _profileService = profileService; 
    } 

    public HomeController() 
    { 
    } 

    public ActionResult Index() 
    { 
     var profiles = _profileService.GetProfile(); 
     return View("Index"); 
    } 

} 
} 

using Domain; 

namespace Services.Spec 
{ 
    public interface IProfileService 
    { 
     Profile GetProfile(); 
    } 
} 

非常感謝,

+0

如果沒有在哪裏創建profileService的新對象,是否使用任何IOC包含器? public HomeController(IProfileService profileService) { _profileService = profileService; } – swapneel 2011-03-05 23:55:24

回答

2

它看起來像您使用的是建立自己的控制器,控制器出廠時的HomeController的構造函數傳遞空。在ASP.NET MVC中,控制器由控制器工廠構建,默認情況下是DefaultControllerFactory類,它只調用默認的構造函數。

,你得到的NullReferenceException代替類HomeController中沒有一個默認的構造函數的事實表明,你已經安裝在你的Global.asax定製控制器工廠,應該提供你的控制器的實例,但這一習俗控制器工廠不會將null傳遞給HomeController構造函數,所以當您稍後嘗試訪問此服務_profileService.GetProfile()時,您會看到異常。您可能正在使用一些依賴注入框架,並在您Application_Start你有這樣的事情:

ControllerBuilder.Current.SetControllerFactory(new SomeCustomControllerFactory()); 

所以,如果你正在使用你需要設置這個框架DI框架傳遞一個具體實施IProfileService接口到的構造函數。如何完成這將完全取決於你正在使用的框架。

+0

即時通訊工廠即時通訊使用雖然我使用默認mvc 2.0 – 2011-03-05 23:40:30

+0

@James Radford,那麼你需要使用工廠或框架將不知道如何實例化您的控制器。你需要一個實現'IProfileService'的類,然後有一個自定義控制器工廠來提供這種依賴。你可以看看[下面的博客文章](http://nayyeri.net/custom-controller-factory-in-asp-net-mvc)。這裏是[另一個](http://www.codecapers.com/post/Simple-Dependency-Injection-using-a-Custom-MVC-Controller-Factory.aspx)。 – 2011-03-05 23:43:50

+0

好,讓我讀一讀這個。 – 2011-03-05 23:50:03

相關問題