Castle Windsor在WCF服务中发布Transient组件

时间:2017-05-14 12:36:48

标签: castle-windsor

我使用Castle Windsor和我的WCF服务(使用控制台应用程序托管)。

这是我的配置:

 container.AddFacility<WcfFacility>().
           Register(Component.For<IService>().
           ImplementedBy<MyService>().LifeStyle.Transient.
           AsWcfService(new DefaultServiceModel().
           AddBaseAddresses("someURI").
           AddEndpoints(WcfEndpoint.BoundTo(new BasicHttpBinding())).
           PublishMetadata(o => o.EnableHttpGet())));

我为我的服务选择了瞬态生活方式,其中一些服务依赖也是瞬态。据我所知,在阅读文档和一些博客后,如果你有生活方式Transient的组件,你应该负责发布它。

  1. 我应该在哪里发布瞬态组件?这是我的责任还是WcfFacility以某种方式照顾它?

  2. 瞬态 PerWcfSession 生活方式有什么区别 (顺便说一下, PerWcfSession PerWcfOperation 之间有什么不同?在WCF服务上调用的每个操作都有自己的会话吗?)

1 个答案:

答案 0 :(得分:1)

  1. 您有责任释放直接从容器中解析的任何组件。因此,您永远不会释放您解析的组件的子依赖项。
  2. 由于在这种情况下,wcf服务由设施解决,您不需要发布任何内容。该设施将照顾。

    1. 如果您注册为PerWcfCall,则每个wcf调用将获得一个组件。如果您使用瞬态而不是每次具有该类型的子依赖关系,您将获得一个新实例。