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