3

これが可能かどうか疑問に思います。次のような署名を持つ典型的なMVCアクションメソッドがあります。

public ActionResult View(MyModel model)
{
   IAnObject myObject = new AnObject();
   //several lines of code follow.....
   return View(model);
}

newそのキーワードを取り除き、IAnObjectのインスタンスをアクションメソッドに挿入したいと思います。しかし、MVCがこれを可能にするかどうかはわかりませんが、アクションメソッドのモデルと一緒にクラスを注入しますか?誰かがこれに遭遇しましたか、そしてそれに取り組む方法はありますか?(私たちのIoCコンテナは、違いが生じる場合に備えて、Windsorです。)

4

3 に答える 3

1

この参照をパラメーターとしてアクションメソッドに挿入することを期待している場合は、InvokeActionメソッドメソッドを持つControllerActionInvokerを参照できます。これは、InvokeActionから呼び出されると思います。このメソッドには、渡されるパラメーターのリストと、アクションの説明(ActionDescriptorクラス)があります。このアクション記述子には、依存性注入に必要なタイプ情報など、パラメーターに関するより詳細な情報を提供するGetParametersメソッドがあります。私はこれを行っていないので、それがどのように機能するかはよくわかりませんが、それは可能のようです。

また、MVCが投稿先のアクションメソッドを選択する方法にどのように影響するかわからないので、それを考慮に入れてください。

于 2012-12-31T17:42:40.473 に答える
1

OnActionExecutingコントローラでアクションが実行される前に呼び出されるインジェクションを実行することをお勧めします。これにより、などのコンテキストが得られますが、Requestメンバー変数を設定できるようになります。つまり、コンストラクターの挿入を「シミュレート」します。そしてもちろん、コントローラー全体に対して1回だけ実行する必要があります。

    [NonAction]
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        _myService = .........;  // get from IoC container

        base.OnActionExecuting(filterContext);
    }
于 2013-02-20T05:54:13.797 に答える
0

コメントについては同意しますが、メソッドスコープでインスタンスを取得する場合は、IoCのコンテナから次のように取得してみてください。

public ActionResult View(MyModel model)
{
   // take from the container of IoC
   IAnObject myObject = _continerIoC.Resolve<IAnObject >();

   //several lines of code follow.....
   return View(model);
}

コンテナ内にインスタンスと具象型を作成するためにを使用することは避けnew、コントローラを依存関係/参照から切り離してください。

コンストラクター/プロパティインジェクションの使用を本当に検討しています。メソッドインジェクションもあります。

于 2012-12-31T16:38:19.210 に答える