在一篇又一篇文章中,任何关于在IIS 中使用 IOC 容器(Unity、Windsor 等)的讨论都涉及到自定义 ServiceHostFactory 和自定义 ServiceHost 的创建。
我能看到的唯一原因是,可以将具有 IInstanceProvider 相关负载的自定义服务行为应用于所有服务。所以我试图理解为什么整个事件没有通过匿名服务配置来简化。这样的配置将允许将自定义行为应用于所有服务,而无需使用自定义 ServiceHostFactory 和自定义服务主机。
也就是说,我可以想象自定义服务主机是必要的唯一原因是自定义 IInstanceProvider 是否与每个 WCF 实例或上下文实例一起回收。当然,我希望每次启动 IIS ServiceHost 时只建立一次 IOC 容器绑定,而不是重复或不定期地建立。
如果我的自定义 IInstanceProvider 确实偶尔被回收,那么我可以将我的 IOC 容器放入自定义服务主机中 - 以确保它尽可能长时间地存在。
但同样,如果我的自定义 IInstanceProvider 将与内置服务主机一样长,那么为什么不跳过自定义服务主机工厂和自定义服务主机呢?
事实上,更进一步,如果我将 IOC Container 放入自定义 IInstanceProvider 的静态成员中,那么 IInstanceProvider 是否被不定期回收也没关系。它来了一个完整的循环:为什么我需要或想要自定义 ServiceHostFactory 和自定义 ServiceHost 来使用带有 WCF 的 IOC 容器?