首页 > 解决方案 > Ninject:使用每个 Get 调用调用一个方法

问题描述

我在 Ninject 上有一个单例绑定,我想在 DI 解决它时调用一个方法(即每次 Get 调用)。Ninject 具有仅在解析对象时调用的 OnActivation 方法。

我知道使用瞬态范围将是直观的解决方案,但由于失控的原因。对象必须是单例的。

标签: c#.netdependency-injectionninject

解决方案


你可以通过一些技巧来实现这一点。让我给你举个例子:

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,但这一次是使用名称条件。这将解析为命名的单例绑定。


推荐阅读