我正在使用服务定位器来保存在 WCF 服务中使用的类的具体实例。我决定将它设为静态,而不是传递 ServiceLocator,这样我就可以从每个类中访问它。服务定位器在 WCF 服务启动时填充,根据某些参数,它可以填充不同的具体实现。
我的问题是,如果在另一个调用完成之前对 WCF 服务进行了调用,那么(我认为)ServiceLocator 将填充不正确的实现。
有什么方法可以使服务定位器对类可用,并且不会被不同的线程或对 WCF 服务的调用重新使用?
我正在使用服务定位器来保存在 WCF 服务中使用的类的具体实例。我决定将它设为静态,而不是传递 ServiceLocator,这样我就可以从每个类中访问它。服务定位器在 WCF 服务启动时填充,根据某些参数,它可以填充不同的具体实现。
我的问题是,如果在另一个调用完成之前对 WCF 服务进行了调用,那么(我认为)ServiceLocator 将填充不正确的实现。
有什么方法可以使服务定位器对类可用,并且不会被不同的线程或对 WCF 服务的调用重新使用?
你提供了一些关于你的服务定位器和底层实现的细节。从我读到的,我知道这是你自己的。
我的个人建议是,您不应该在 WCF 服务的情况下使用服务定位器,因为 WCF 公开了一些启用依赖注入的接口。
您可以在此处阅读有关反模式服务定位器的更多信息:http: //blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
您不应该实现您的服务定位器,因为您可以使用许多围绕依赖注入的 OSS 项目,并且可以以正确的方式完成工作。
这是使用带有 WCF 服务的 StructureMap 的依赖注入的正确实现:http: //lostechies.com/jimmybogard/2008/07/30/integrating-structuremap-with-wcf/。