对象引用未设置为对象错误的实例!
任何人都可以看到我在这里做错了吗?我试图学习如何具有规格/服务和域名项目,但在这种情况下,它是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();
}
}
非常感谢,
它看起来像您使用的是建立自己的控制器,控制器出厂时的HomeController的构造函数传递空。在ASP.NET MVC中,控制器由控制器工厂构建,默认情况下是DefaultControllerFactory
类,它只调用默认的构造函数。
,你得到的NullReferenceException
代替类HomeController中没有一个默认的构造函数的事实表明,你已经安装在你的Global.asax
定制控制器工厂,应该提供你的控制器的实例,但这一习俗控制器工厂不会将null传递给HomeController构造函数,所以当您稍后尝试访问此服务_profileService.GetProfile()
时,您会看到异常。您可能正在使用一些依赖注入框架,并在您Application_Start
你有这样的事情:
ControllerBuilder.Current.SetControllerFactory(new SomeCustomControllerFactory());
所以,如果你正在使用你需要设置这个框架DI框架传递一个具体实施IProfileService
接口到的构造函数。如何完成这将完全取决于你正在使用的框架。
即时通讯工厂即时通讯使用虽然我使用默认mvc 2.0 – 2011-03-05 23:40:30
@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
好,让我读一读这个。 – 2011-03-05 23:50:03
如果没有在哪里创建profileService的新对象,是否使用任何IOC包含器? public HomeController(IProfileService profileService) { _profileService = profileService; } – swapneel 2011-03-05 23:55:24