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 に答える