Ninject是否具有相当于Autofac的TypedParameter或ResolvedParameter?

Ale*_*ffe 1 ninject ioc-container autofac

在Autofac中,可以在注册服务时指定TypedParameter,该服务给出将传递给服务构造函数的特定值或委托.在解析/实例化期间,将通过类型发现构造函数上的实际参数.

在Ninject中,我只能找到对命名参数的支持(即,提前知道.ctor参数的实际名称).否则,Ninject将发现未指定的构造函数参数,并尝试通过检查容器来解析所需的任何类型.

但是,这对我的需求来说还不够具体,因为我需要传递给不同服务实例的构造函数的多个相同类型的实例.

我想给Ninject一个特定的工厂委托或值作为构造函数参数,只给出一个类型作为限定符,而不是参数名称.我也不希望通过使用任何属性修饰构造函数参数来依赖Ninject.

这可能吗?提前谢谢了!

Rem*_*oor 6

我认为你想要的是条件绑定.最普遍的是:

Bind<IFoo>().To<Foo>().When(request => SomeFancyFilter(); }
Run Code Online (Sandbox Code Playgroud)

我不知道什么最适合你,因为你没有真正指定你真正想要实现的目标.但我想以下其中一个应该适用:

Bind<IFoo>().To<Foo1>().WhenInjectedInto<Class1>()
Bind<IFoo>().To<Foo2>().WhenInjectedInto<Class2>()
Run Code Online (Sandbox Code Playgroud)

或者:创建自己的属性,例如Bar1,Bar2并将它们添加到构造函数中:

public Class1([Bar1]IFoo foo)
public Class2([Bar2]IFoo foo)
public Class3([Bar2]IFoo foo)

Bind<IFoo>().To<Foo1>().WhenTargetHas<Bar1Attribute>()
Bind<IFoo>().To<Foo2>().WhenTargetHas<Bar2Attribute>()
Run Code Online (Sandbox Code Playgroud)