Доступ к свойству базового класса, которое определено с помощью внедрения свойств в конструкторе базового класса

Я прочитал все в вики ninject и множество сообщений и до сих пор не понимаю, как настроить инъекцию, чтобы я мог ссылаться на это свойство. Я хочу иметь возможность ссылаться на свойство в конструкторе базового класса, чтобы в конечном итоге установить общее свойство 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();
    }
 }

person RCM01    schedule 23.01.2011    source источник


Ответы (1)


Свойства внедряются после вызова конструктора, что означает, что вам нужно либо использовать внедрение конструктора, либо получить к ним доступ после того, как объект был создан. Вы можете заставить свой контроллер реализовать 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();
    }
}
person Darin Dimitrov    schedule 23.01.2011
comment
Дарин, мерси. Это было то уточнение, которое мне было нужно. - person RCM01; 24.01.2011