0

我已经阅读了 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();
    }
 }
4

1 回答 1

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();
    }
}
于 2011-01-23T20:54:37.870 回答