根据 ConstructorArgument 从 Ninject 获取不同的对象

发布于 2024-12-12 04:36:10 字数 375 浏览 0 评论 0原文

我有以下代码:

kernel.Get<IFoo>(new ConstructorArgument("rule", myRule))

我希望根据 myRule 中的值获得不同的对象。我该怎么做? 像这样的伪代码

Bind<IFoo>().To<Foo1>().When(x=>x.Parameters[0].Value.Type=="type1")
Bind<IFoo>().To<Foo2>().When(x=>x.Parameters[0].Value.Type=="type2")

,其中 Type 是 myRule 的成员

I have following code:

kernel.Get<IFoo>(new ConstructorArgument("rule", myRule))

I want that I get different objects depending of the value in myRule. How do I do that?
Something like this psedocode

Bind<IFoo>().To<Foo1>().When(x=>x.Parameters[0].Value.Type=="type1")
Bind<IFoo>().To<Foo2>().When(x=>x.Parameters[0].Value.Type=="type2")

where Type is a member of myRule

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灵芸 2024-12-19 04:36:10

访问构造函数参数的类型并不容易。您可能希望改为使用命名绑定或元数据和约束。

Bind<IFoo>().To<Foo1>().WithMetadata("Type", typeof(MyRule1))
kernel.Get<IFoo>(m => m.Get<Type>("Type", null) == typeof(myRule), ConstructorArgument("rule", myRule))

但提醒只能从配置中访问内核(例如属于配置的工厂)

Accessing the type of constructor arguments is not easily possible. You might want to change to using either Named bindings or metadata and constraints instead.

Bind<IFoo>().To<Foo1>().WithMetadata("Type", typeof(MyRule1))
kernel.Get<IFoo>(m => m.Get<Type>("Type", null) == typeof(myRule), ConstructorArgument("rule", myRule))

But remind to access the kernel only from the configuration (e.g. factories belonging to the configuration)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文