c# - Ninject:使用每个 Get 调用调用一个方法
问题描述
我在 Ninject 上有一个单例绑定,我想在 DI 解决它时调用一个方法(即每次 Get 调用)。Ninject 具有仅在解析对象时调用的 OnActivation 方法。
我知道使用瞬态范围将是直观的解决方案,但由于失控的原因。对象必须是单例的。
解决方案
你可以通过一些技巧来实现这一点。让我给你举个例子:
const string Name = "Foo";
// Singleton Binding. Will only be used when the context uses the {Name}
Bind<Foo>().To<Foo>()
.Named(Name)
.InSingletonScope();
// Unnamed binding with method call on each resolution
Bind<Foo>().ToMethod(ctx =>
{
// Do anything arbitrary here. like calling a method...
return ctx.Kernel.Get<Foo>(Name));
});
当Foo
内核请求(未命名)时,它将解析为ToMethod
绑定 - 您可以在其中插入任何您喜欢的任意代码。最后,该方法必须使用内核来请求Foo
,但这一次是使用名称条件。这将解析为命名的单例绑定。
推荐阅读
- python - 按 (lat,long) 值对数据进行分组以确定绘图的颜色
- java - 有序、长时间运行的异步作业
- linux - cc1: 错误: '-march=' 开关的错误值 ('armv8-a')
- r - 我想使用 colSums 找到折旧
- python - Python - 请求检查?
- python - “NaN”和“nan”之间的区别以及可能由此引起的错误
- python - 无法在 Google Colab 中将 ML 模型保存到 Google Drive
- applescript - 如何使用 AppleScript 切换“减少动作”首选项?
- azure - 使用 Python 通过 Azure AD 查询 Azure SQL 数据库
- javascript - 在 Microsoft Bot Framework 中以电子邮件形式接收和发送附件