gpt4 book ai didi

dependency-injection - 将值注入(inject)到注入(inject)的依赖项中

转载 作者:行者123 更新时间:2023-12-04 07:13:54 33 4
gpt4 key购买 nike

我有这样的事情:

class Root
{
public Root(IDependency dep)
{}
}
class Dependency:IDependency
{
public Dependency(int val)
{}
}

我正在尝试使用 ninject 获取对 Root 的引用。
所以我像这样配置它

var module = new InlineModule(mod => mod.Bind<IDependency>().To<Dependency>());

var kernel = new StandardKernel(module);

我想向 Dependency 注入(inject)一些“val”值,该值仅在从 ninject 获取 Root 引用时才知道。

我想做的是这样的:

Kernel.Instance.Get<Root>(With.Parameters.ConstructorArgument("val", 12));

使用ninject 1.0可以实现这样的事情吗?

最佳答案

Parameters.ConstructorArgument在上下文中,默认情况下只深一层。

将参数向下传递多个级别的一种方法是使用 ContextParameter,但随后需要捕获它并说 - 现在我们将使用它作为
在这种情况下是 ConstructorArgument。一种这样的构造是提供者。见 this dojo page for details of Providers

所以你可以这样做:

    class DependencyProvider : SimpleProvider<Dependency>
{
protected override Dependency CreateInstance( IContext context )
{
return new Dependency( (int)context.ParentContext.Parameters.GetOne<ContextVariableParameter>( "masterVal" ).Value );
}
}

public static void Main()
{
var module = new InlineModule(
mod => mod.Bind<IDependency>().ToProvider( new DependencyProvider() )
);

var kernel = new StandardKernel( new[ ] {module} );

Root root = kernel.Get<Root>( With.Parameters.ContextVariable( "masterVal", 12 ) );
}

或者您可以按如下方式管理它:

    class RootProvider : SimpleProvider<Root>
{
protected override Root CreateInstance( IContext context )
{
return new Root( context.Kernel.Get<Dependency>( With.Parameters.ConstructorArgument("val", ( int )context.Parameters.GetOne<ContextVariableParameter>("masterVal").Value )));
}
}

public static void Main()
{
var module = new InlineModule(
mod => mod.Bind<IDependency>().To<Dependency>(), // Optional if ImplictSelfBinding is on
mod => mod.Bind<Root>().ToProvider( new RootProvider() )
);

var kernel = new StandardKernel( new[] {module} );

Root root = kernel.Get<Root>( With.Parameters.ContextVariable( "masterVal", 12 ) );
}

当您考虑这个问题时,请考虑 the points I make in this point re separating the concerns if configuration from object binding in this response .

关于dependency-injection - 将值注入(inject)到注入(inject)的依赖项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153770/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com