我有一个服务,每次GetNext()
调用方法时都需要返回一个代码。为此,我有几个实现接口的代码提供程序。在 ServiceHost 打开和关闭之间应使用相同的代码提供程序,对于每个服务调用也是如此。我想避免在每次调用时创建一个代码提供程序实例。
我已经看过几篇文章,特别是 WCF 服务的依赖注入(主要是 Mark Seemann 的答案),其中使用 IInstanceProvider 和 ServiceHostFactory 的解决方案允许在服务构建期间传递参数。也许我没有完全理解那里发生的事情,因为我对 WCF 没有扩展知识。我最终实现了一个静态工厂并在服务实现中使用它,如下所示:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,
InstanceContextMode = InstanceContextMode.PerCall)]
public class CodeService : ICodeService
{
public string GetNext()
{
return CodeProviderFactory.GetCodeProvider().GetNextCode();
}
}
如果需要,我可以通过将所需的代码类型传递给工厂,从配置数据库或文件中获取它来扩展它,但这不是重点。这是拥有一个代码提供者的单一实例的最佳方式吗?如果不是,那么正确的(即更优雅、更高效和可维护)的解决方案是什么?拥有一个代码提供者实例的担忧也合法吗?