【问题标题】:Adding service initialization method when using Castle Windsor IoC container使用 Castle Windsor IoC 容器时添加服务初始化方法
【发布时间】:2013-04-23 10:03:58
【问题描述】:

如果我的服务有一些初始化代码,我知道两种选择:

  1. 实现ISupportInitialize.
    Pro:仅依赖于 .NET 原生接口。
    缺点:我通常只使用 BeginInit(),所以总是有不必要的空 EndInit() 代码

  2. 实现 Castle Core 的 IInitializable。
    优点:只需要实现一种方法。
    缺点:我必须让我的课程依赖于 Castle Core。

有更好的选择吗?

【问题讨论】:

  • 您可以创建自己的界面并使用它。您在这里所做的称为时间耦合,并且被许多人认为是一种设计气味。阅读this了解更多信息。
  • @DanielHilgarth 如果我创建自己的界面,Castle Windsor 怎么知道它应该执行这些代码?
  • 它没有。我不知道代码会自动执行。
  • 但如果我实现 ISupportInitialize 或 IInitializable,它似乎会自动执行代码。

标签: c# .net castle-windsor ioc-container


【解决方案1】:

是的,有:

Component.For<Foo>().OnCreate(foo => foo.WhateverMethodYouWant());

详情是in the documentation

【讨论】:

  • 有没有办法为每个实现了某个接口的组件触发OnCreate
  • .ConfigureFor(c=>c.OnCreate(something))
【解决方案2】:

另一种选择可能是将相关组件转换为城堡设施,您可以在其中进行更明确的控制,但这可能是矫枉过正。

我只会选择选项 1。多余的 EndInit 无关紧要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多