gpt4 book ai didi

c# - 如何更改 Ninject 中现有绑定(bind)的范围

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:10 24 4
gpt4 key购买 nike

在一个模块中,我为一个对象设置了绑定(bind)。还有另外两个模块:测试模块和网络模块。 Web 模块希望该绑定(bind)在请求范围内,而测试模块希望该绑定(bind)在单例范围内。现在,我们只是复制整个绑定(bind)并添加适当的范围。有一个更好的方法吗?我正在寻找一种可以在一个模块中进行绑定(bind)本身(它是 ToMethod 绑定(bind))的方法,然后让测试和 Web 模块更改该绑定(bind)的范围。

最佳答案

这种情况并没有被 ninject 特别支持,很可能也没有被任何其他 IoC 支持。特别是作用域,但也可能有其他东西,例如上下文参数和解析某些类型和配置的方式,这些东西通常取决于应用程序/组合根。

但是,如果您愿意,当然可以使用“正常”编程原则来减轻负担。但我不会真的推荐它,因为虽然你可以使示波器易于配置,但它会使其他事情变得更加复杂和难以维护。例如:

public class ConfigurableScopeBindingModule : NinjectModule
{
private readonly Action<IBindingInSyntax<object>> scopeConfigurator;

public ConfigurableScopeBindingModule(Action<IBindingInSyntax<object>> scopeConfigurator)
{
this.scopeConfigurator = scopeConfigurator;
}

public override void Load()
{
this.BindAndApplyScoping(x => x.Bind(typeof(string)).ToSelf());
}

private void BindAndApplyScoping(Func<IBindingRoot, IBindingInSyntax<object>> binding)
{
this.scopeConfigurator(binding(this));
}
}

并像这样使用:

IKernel.Load(new ConfigurableScopeBindingModule(x => x.InSingletonScope()));

关于c# - 如何更改 Ninject 中现有绑定(bind)的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24613102/

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