C# 如何将参数传递给Ninject创建的瞬态对象?

C# 如何将参数传递给Ninject创建的瞬态对象?,c#,ninject,C#,Ninject,我正在开发一个ASP.NETMVC3项目,使用NInject创建对象实例。它为每个动作构建一个对象图。它在大多数情况下都很有效。然而,我有一个新的要求,我必须将一些参数(从请求)传递给对象图中的几个对象(它们是瞬态的)。 我该怎么做?以下是一个例子: class MyController : Controller { [Inject] public IProcess Process {get;set;} public ActionResult MyAction(int

我正在开发一个ASP.NETMVC3项目,使用NInject创建对象实例。它为每个动作构建一个对象图。它在大多数情况下都很有效。然而,我有一个新的要求,我必须将一些参数(从请求)传递给对象图中的几个对象(它们是瞬态的)。 我该怎么做?以下是一个例子:

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();
    }
}
如上面的代码所示,流程属性被注入由NInject创建的
IProcess
实例。在场景后面有一个复杂的对象图。我想把“值”传递给对象图中的一个对象,它是
IProcess
实例使用的
IOptions
的一个瞬态实例。
IOptions
接口有一个名为
SetValue(int)
的方法

我想做的事情是,当IOptions对象被创建时,它的SetValue(int)将被调用。当然,它应该是线程安全的

有什么想法吗?

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));
    }
}
公共接口IProcessFactory{
i进程创建(int值);
}
公共类ProcessFactory:IPProcessFactory{
公共i进程创建(int值)
{
返回this.kernel.Get(新参数(“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)));
this.Bind().To();
this.Bind()到()
.OnActivation((ctx,o)=>o.SetValue((int)ctx.Parameters.Single(p=>p.Name==“value”).GetValue(ctx,ctx.Request.Target));

我认为ninject扩展中还应该有一个扩展方法,它可以简化激活调用的过程。

调用MyAction时是否可以选择创建IProcess实例?然后我可以给你一个答案是的,我可以在MyAction中创建IProcess。请帮忙。注意:解决方案应该是线程安全的,因为MyAction()将在不同的线程上执行。