对象引用未设置为对象错误的实例!

对象引用未设置为对象错误的实例!

问题描述:

任何人都可以看到我在这里做错了吗?我试图学习如何具有规格/服务和域名项目,但在这种情况下,它是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

它看起来像您使用的是建立自己的控制器,控制器出厂时的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