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

时间:2011-10-13 12:04:29

标签: c# dependency-injection ninject

我正在尝试将Func绑定到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类型的构造函数的参数格式化程序中”。

如何实现Service1的单例并允许调用类型提供IFormatter依赖性?我可以简单地完成这项工作:

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

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

1 个答案:

答案 0 :(得分:3)

您必须使用ConstructorArgument代替Parameter

此外,我会重新考虑你的设计。我觉得它有问题。如果你使用不同的格式化程序实例调用Func两次,如果服务是单例,你将无法获得第二次你期望的结果。最有可能的是,对IFormatter使用条件绑定比使用构造函数参数将其传递给服务更好。