[英]Castle Windsor: How to register by convention with delegate method?
我正在编写命令行应用程序,并将Castle Windsor用作DI。 温莎城堡对我来说是新手,决定学习另一个DI容器。 否则,我通常使用Autofac。
我试图按惯例注册我的命令行选项对象,但是在注册它们之前,我需要解析它们。
简单注册的工作原理如下:
container.Register(Component.For<BasicOptions>()
.UsingFactoryMethod(_ => Program.ParseOptions(new BasicOptions())));
(不确定这是否是委托的最佳实现,因为我已经在其中有了new BasicOptions()
。但这就是我想到的。请提出建议,如果您知道这样做的更好方法。)
实际的问题是一次性注册所有这些选项对象,但是按约定注册时,我似乎无法使用委托:
container.Register(Classes.FromThisAssembly().BasedOn<ICommandLineOptions>());
(所有选项类都具有ICommandLineOptions
接口,就像标记一样。接口中没有任何内容。)
在这里,我找不到说“在注册选项对象之前,解析它们”的方法。 有什么建议么?
我认为您可以使用以下方式:
container.Register(
Classes.FromThisAssembly().BasedOn<ICommandLineOptions>().Configure(c => c.UsingFactoryMethod((kernel,context) => Program.ParseOptions(new BasicOptions())));
如果不需要内核或上下文,则可以像上面一样简单地使用_。
亲切的问候,Marwijn。
===编辑===
使用上下文:
container.Register(
Classes.FromThisAssembly().BasedOn<ICommandLineOptions>().Configure(
c => c.UsingFactoryMethod((kernel, context) =>
Program.ParseOptions(Activator.CreateInstance(context.RequestedType))
)
));
或者,如果parse函数不创建新对象而是仅填充属性,则可以执行以下操作:
container.Register(
Classes.FromThisAssembly().BasedOn<ICommandLineOptions>().Configure(
c => c.OnCreate((kernel, instance) => Program.ParseOptions(instance)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.