Ссылка на объект не установлена ​​на экземпляр ошибки объекта! - PullRequest
0 голосов
/ 06 марта 2011

Кто-нибудь может увидеть, что я здесь делаю не так? Я пытаюсь научиться иметь спецификации / сервисы и доменные проекты в целом, но в данном случае это 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();
    }
}

Большое спасибо,

1 Ответ

2 голосов
/ 06 марта 2011

Похоже, что фабрика контроллеров, которую вы используете для сборки ваших контроллеров, обнуляется в конструкторе HomeController.В ASP.NET MVC контроллеры создаются фабрикой контроллеров, которая по умолчанию является классом DefaultControllerFactory, который просто вызывает конструктор по умолчанию.

Тот факт, что вы получаете NullReferenceException вместо , класс HomeController не имеет конструктора по умолчанию означает, что вы настроили фабрику пользовательских контроллеров в Global.asax, котораядолжен предоставлять экземпляры ваших контроллеров, но эта фабрика пользовательских контроллеров не передает null конструктору HomeController, поэтому, когда позже вы попытаетесь получить доступ к этой службе _profileService.GetProfile(), вы получите исключение.Вероятно, вы используете какую-то инфраструктуру внедрения зависимостей, и в вашем Application_Start есть что-то вроде этого:

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

Так что, если вы используете инфраструктуру DI, вам нужно настроить эту инфраструктуру для передачи конкретной реализацииIProfileService интерфейс к конструктору.То, как это будет сделано, будет полностью зависеть от используемой вами платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...