将委托作为单例绑定到方法

本文关键字:绑定 方法 单例 | 更新日期: 2023-09-27 18:11:14

我试图将一个函数绑定到IService (Service1)的实现。Service1接受提供的IFormatter作为参数。请求Service1的类型将提供格式化程序实例(这就是为什么我使用Func而不是普通的IService)。以下是我目前所做的:

Bind<Func<IFormatter, IService>>()
    .ToMethod(context => formatter => 
        context.Kernel.Get<Service1>(new Parameter("formatter", formatter, false)));
Bind<Service1>().ToSelf().InSingletonScope();

这会抛出:"将依赖项IFormatter注入到Service1类型构造函数的参数formatter中"。

如何实现Service1的单例并允许调用类型提供IFormatter依赖?我可以简单地这样做:

Bind<Func<IFormatter, IService>>()
    .ToMethod(context => formatter => new Service1(formatter))
    .InSingletonScope();

但是返回的Service1实例不是单例。这可能吗?

将委托作为单例绑定到方法

您必须使用ConstructorArgument而不是Parameter

此外,我会重新考虑你的设计。我觉得有点问题。如果使用不同的格式化器实例两次调用Func,那么如果该服务是单例的,那么第二次调用时将得不到预期的结果。最有可能的是,使用IFormatter的条件绑定比使用构造函数参数将其传递给服务更好。