Ale*_*ffe 1 ninject ioc-container autofac
在Autofac中,可以在注册服务时指定TypedParameter,该服务给出将传递给服务构造函数的特定值或委托.在解析/实例化期间,将通过类型发现构造函数上的实际参数.
在Ninject中,我只能找到对命名参数的支持(即,提前知道.ctor参数的实际名称).否则,Ninject将发现未指定的构造函数参数,并尝试通过检查容器来解析所需的任何类型.
但是,这对我的需求来说还不够具体,因为我需要传递给不同服务实例的构造函数的多个相同类型的实例.
我想给Ninject一个特定的工厂委托或值作为构造函数参数,只给出一个类型作为限定符,而不是参数名称.我也不希望通过使用任何属性修饰构造函数参数来依赖Ninject.
这可能吗?提前谢谢了!
我认为你想要的是条件绑定.最普遍的是:
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)
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |