当Windsor实例化类型时,是否可以执行一些自定义处理?
类似于:
container.Register(
AllTypes.Pick()
.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<MyMarkerInterface>()
.WhenInstantiating(instance => // do some stuff with this instance)
.Configure(component => component.Startable().LifeStyle.Singleton)
.WithService.Base());
目前我们正在使用IStartable。由于“开始”代码(即自定义处理)是相同的,所以将这个逻辑移出每个类是很好的。
谢谢! 布赖恩
答案 0 :(得分:5)
你的意思是OnCreate
方法吗?
container.Register(
AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<MyMarkerInterface>()
.WithService.Base()
.OnCreate((kernel, instance) => instance.CreatedAt = DateTime.Now)
);
Singleton是默认生活方式,因此您无需明确说明。
请注意,与Startable工具的工作方式相比,此处的行为略有不同。
同样,虽然文档声明OnCreate住在一个设施中,但它不再是真的(是的,我们需要更新文档)。这种方法可以开箱即用。