2

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。由于“开始”代码(即自定义处理)是相同的,因此最好将此逻辑移出每个类。

谢谢!布赖恩

4

1 回答 1

5

你的意思是类似OnCreate方法的东西?

    container.Register(
              AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
                  .BasedOn<MyMarkerInterface>()
                  .WithService.Base()
                  .OnCreate((kernel, instance) => instance.CreatedAt = DateTime.Now)
);

Singleton 是默认的生活方式,因此您不必明确说明。

但是请注意,与 Startable 工具的工作方式相比,此处的行为略有不同。

  • 当组件可启动时,它会尽快由容器本身实例化并启动(当其所有必需的依赖项都可用时)。
  • OnCreate 在您的组件从容器返回之前被调用,但它不会主动创建它。所以如果从不拉这个组件,它的 OnCreate 将不会被调用。

此外,虽然文档声明 OnCreate 存在于设施中,但它不再是真的(是的,我们需要更新文档)。这种方法开箱即用。

于 2010-03-22T18:35:16.123 回答