【问题标题】:Accessing a base class property that is defined with Property Injection in the base class's constructor访问在基类的构造函数中使用属性注入定义的基类属性
【发布时间】:2011-01-23 20:34:18
【问题描述】:

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

【问题讨论】:

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


    【解决方案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();
        }
    }
    

    【讨论】:

    • 达林,谢谢。这是我需要的澄清。
    猜你喜欢
    • 2015-12-26
    • 2019-05-21
    • 1970-01-01
    • 2011-09-07
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多