gpt4 book ai didi

dependency-injection - Ninject 条件绑定(bind)

转载 作者:行者123 更新时间:2023-12-05 00:36:15 31 4
gpt4 key购买 nike

我在家里用 Ninject 做一个简单的测试床项目,只是想看看我能用它做什么。作为一个起点,我正在为一些服务构建一个控制台运行器,它接受各种参数,并根据它输入的内容,使用为流畅接口(interface)提供的相同方法来配置要运​​行的模型。

例如,假设我有一个详细程度开关 /o . /o可以传递为 /o:quiet , /o:normal , 或 /o:verbose .各种选项是不言自明的。

为了满足这个论点,我想附上 ILogger 的各种实现。 - quiet 获取一个仅打印关键消息的安静记录器,normal 获取一个普通记录器,verbose 获取一个打印所有内容的健谈记录器。

我想做的是模块中的一些东西,比如:

Bind<ILogger>().To<QuietLogger>().When(VerbosityParameter=="quiet");
Bind<ILogger>().To<VerboseLogger>().When(VerbosityParameter=="verbose");

...等等。

我看不出怎么做这样的事情;所有条件绑定(bind)似乎都依赖于注入(inject)目标的状态。那有什么意义呢?当消费类必须准确详细地指定确定它获得什么具体类型所需的所有条件时,它是否会破坏依赖注入(inject)的整个点?为什么我不能直接告诉 Ninject 我想要什么并得到它?

最佳答案

ctx参数只是 contextual binding 的一个输入- 没有什么说你需要注意它(除非你需要与委托(delegate)签名兼容)。

请记住 RRR pattern不过,不要发疯。

IOW 你需要(在 V2 语法中这样做):

Bind<IWarrior>().To<Samurai>().When(_ => expression not involving context at all);

(其中 _ 是一个穷人使用 F# 模式匹配语法忽略输入的 pidgin)

关于dependency-injection - Ninject 条件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391521/

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