1

NInject を使用してオブジェクト インスタンスを作成する ASP.NET MVC 3 プロジェクトを開発しています。各アクションのオブジェクト グラフを作成します。ほとんどの場合、うまく機能します。ただし、オブジェクト グラフ内の (一時的な) いくつかのオブジェクトに (リクエストから) いくつかのパラメーターを渡す必要があるという新しい要件があります。どうやってやるの?次に例を示します。

class MyController : Controller
{
    [Inject]
    public IProcess Process {get;set;}

    public ActionResult MyAction(int value)
    {
         // how to pass the 'value' to an object (IOptions) created by NInject
         this.Process.Run();
    }
}

上記のコードに示すように、Process プロパティにはIProcess、NInject によって作成された のインスタンスが挿入されます。背後には複雑なオブジェクト グラフがあります。IOptionsそして、インスタンスによって使用される一時的なインスタンスであるオブジェクト グラフ内のオブジェクトの 1 つに「値」を渡したいと思いIProcessます。IOptionsインターフェイスには、 という名前のメソッドがありますSetValue(int)

私がやりたいことは、IOptions オブジェクトが作成されると、その SetValue(int) が呼び出されることです。もちろん、スレッドセーフであるべきです。

何か案が?

4

1 に答える 1

2

Hy これは、カスタム ファクトリまたはNinject.Factory.Extension舞台裏ですべての魔法を行う のいずれかで実現できます。ここでは、手動のアプローチを示します。

public interface IProcessFactory {
   IProcess Create(int value);
}

public class ProcessFactory : IProcessFactory {
    public IProcess Create(int value)
    {
        return this.kernel.Get<IProcess>(new Parameter("value", value, true));
    }
}

モジュールのどこかに:

        this.Bind<IProcess>().To<Process>();
        this.Bind<IOption>().To<Option>()
            .OnActivation((ctx, o) => o.SetValue((int)ctx.Parameters.Single(p => p.Name == "value").GetValue(ctx, ctx.Request.Target)));

呼び出しを簡素化できる ninject 拡張機能のどこかに拡張メソッドも必要だと思いOnActivationます。

于 2012-05-31T23:06:45.590 に答える