gpt4 book ai didi

c# - 使用简单注入(inject)器的等效 Ninject 代码

转载 作者:行者123 更新时间:2023-11-30 16:42:31 27 4
gpt4 key购买 nike

决定从 Ninject 切换到 Simple Injector,我遇到的一个问题是试图将此代码转换为 Simple Injectors Equivalent:

var resolver = new SomeResolver(container); 

container.Rebind(typeof(IHubConnectionContext<dynamic>))
.ToMethod(context =>
resolver.Resolve<IConnectionManager>().GetHubContext<PlanHub>().Clients
).WhenInjectedInto<PlanHubService>();

最佳答案

  • 使用Rebind在 Ninject 中相当于使用 RegisterAllowOverridingRegistrations设置为 true在简单注入(inject)器中。
  • WhenInjectedInto在 Ninject 中相当于使用 RegisterConditional在简单注入(inject)器中。
  • ToMethod在 Ninject 中通常等于使用 Register<T>(Func<T>)在 Simple Injector 中,但结合 RegisterConditional你将不得不回头创建一个 Registration使用 Lifestyle.CreateRegistration<T>(Func<T>, Container) .

因此,您可以将绑定(bind)重写为以下简单注入(inject)器代码:

container.RegisterConditional(
typeof(IHubConnectionContext<dynamic>),
Lifestyle.Transient.CreateRegistration(
() => container.GetInstance<IConnectionManager>().GetHubContext<PlanHub>().Clients,
container),
WhenInjectedInto<PlanHubService>);

在哪里WhenInjectedInto<T>是一个自定义的辅助方法,定义如下:

private static bool WhenInjectedInto<T>(PredicateContext context) =>
typeof(T).IsAssignableFrom(context.Consumer.ImplementationType);

关于c# - 使用简单注入(inject)器的等效 Ninject 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46594852/

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