Sil*_*viu 8 dependency-injection ninject
我有这样的事情:
class Root
{
public Root(IDependency dep)
{}
}
class Dependency:IDependency
{
public Dependency(int val)
{}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用ninject获取对Root的引用.所以我这样配置它
var module = new InlineModule(mod => mod.Bind<IDependency>().To<Dependency>());
var kernel = new StandardKernel(module);
Run Code Online (Sandbox Code Playgroud)
我想向Dependency注入一些'val'值,这个值仅在从ninject获取Root引用时才知道.
我想做的是这样的事情:
Kernel.Instance.Get<Root>(With.Parameters.ConstructorArgument("val", 12));
Run Code Online (Sandbox Code Playgroud)
使用ninject 1.0是否可以这样?
在Parameters.ConstructorArgument上下文中唯一无二一个LEVE默认深.
将参数传递到多个级别的一种方法是使用ContextParameter,但是然后需要抓住它并说 - 现在我们将在这种情况下将其用作ConstructorArgument.一个这样的构造是提供者.有关提供者的详细信息,请参阅此dojo页面
所以你可以这样做:
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 ) );
}
Run Code Online (Sandbox Code Playgroud)
或者您可以按如下方式管理它:
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 ) );
}
Run Code Online (Sandbox Code Playgroud)
在考虑这个问题时,请考虑我在这一点上提出的要点,如果配置来自此响应中的对象绑定,请重新分离关注点.
| 归档时间: |
|
| 查看次数: |
6945 次 |
| 最近记录: |