访问在基类的构造函数中使用Property Injection定义的基类属性

时间:2011-01-23 20:34:18

标签: asp.net-mvc-3 ninject-2 property-injection

我已经阅读了ninject wiki和很多帖子中的所有内容,但仍然不明白如何设置注入以便我可以引用此属性。我希望能够在基类构造函数中引用该属性,以便在创建任何控制器时最终设置公共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 个答案:

答案 0 :(得分: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();
    }
}