我正在尝试将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实例不是单例。这有可能吗?
答案 0 :(得分:3)
您必须使用ConstructorArgument
代替Parameter
。
此外,我会重新考虑你的设计。我觉得它有问题。如果你使用不同的格式化程序实例调用Func两次,如果服务是单例,你将无法获得第二次你期望的结果。最有可能的是,对IFormatter使用条件绑定比使用构造函数参数将其传递给服务更好。