Доступ к свойству базового класса, который определен с помощью инъекции свойства в конструкторе базового класса - PullRequest
0 голосов
/ 23 января 2011

Я прочитал все в недействительной вики и множество постов и до сих пор не понимаю, как настроить инъекцию, чтобы я мог ссылаться на это свойство. Я хочу иметь возможность ссылаться на свойство в конструкторе базового класса, чтобы в конечном итоге установить общее свойство ViewBag при создании любого контроллера. Кажется, что реализация интерфейса iInitializable была бы правильным подходом, но опять же просто не знаю, как это сделать. Кроме того, я решил не внедрять IMyService в конструктор базовых классов, чтобы упростить кодирование производных классов.

упрощенная версия моей последней попытки кода:

public class AppController : Controller 
{

    [Inject]
    public IMyService myService{get; set;}

    public AppController()
    {
       //I want to do this, but myService is null
       //ViewBag.DefaultName = myService.Name;
    }

}

public class DashboardController : AppController
{
    public ActionResult Index()
    {
        //myService is accessible, so injection works
        return View();
    }
 }

1 Ответ

1 голос
/ 23 января 2011

Свойства внедряются после вызова конструктора, а это означает, что вам нужно использовать либо конструктор, либо получить доступ к ним после создания объекта.Вы можете заставить свой контроллер реализовать IInitializable:

public class AppController : Controller, IInitializable
{
    [Inject]
    public IMyService MyService { get; set; }

    public void Initialize()
    {
        ViewBag.DefaultName = MyService.Name;
    }
}

public class DashboardController : AppController
{
    public ActionResult Index()
    {
        return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...