2011-01-23 3 views
0

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

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

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

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

Дарин, merci. Это было разъяснение, в котором я нуждался. – RCM01