C# WCF服务依赖注入和静态工厂

C# WCF服务依赖注入和静态工厂,c#,wcf,design-patterns,dependency-injection,static-factory,C#,Wcf,Design Patterns,Dependency Injection,Static Factory,我有一个服务,每次调用方法GetNext()时都需要返回一个代码。为此,我有几个代码提供者实现了一个接口。在ServiceHost打开和关闭之间,以及在每个服务调用之间,应使用相同的代码提供程序。我希望避免在每次调用时创建一个代码提供程序实例 我已经看过几篇文章,特别是WCF服务的依赖注入(主要是Mark Seemann的答案),其中使用IInstanceProvider和ServiceHostFactory的解决方案允许在服务构建期间传递参数。也许我没有完全理解那里发生了什么,因为我对WCF没

我有一个服务,每次调用方法
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();
    }
}

如果需要,我可以通过将所需的代码类型传递给工厂,从配置数据库或文件中获取代码来扩展它,但这不是重点。这是拥有一个代码提供程序实例的最佳方式吗?如果不是,正确的解决方案是什么(即更优雅、更高性能、更可维护)?另外,代码提供程序的单个实例是否合法?

是否使用IoC容器?如果是,哪一个?某些容器具有WCF扩展性,因此您可以使用它们的工厂,在几分钟内启动并运行,而无需启动自己的工厂。另一个建议:您可以将CodeProviderFactory的实例注册为singleton,并将其注入到服务的构造函数中,有效地使其功能与静态调用相同。我尝试使用SimpleInjector,但使用客户端,而不是服务器端。在阅读了大量关于DI的文章和教程之后,我停下来,因为它对我来说太复杂了,但也因为项目规模不是很大,所以我觉得不值得。尽管如此,我还是希望在坚实的基础上编写尽可能多的可扩展代码。好吧,在构建过程中传递参数是DI,所以如果您尝试这样做,我强烈建议您使用容器和现有工具,而不是编写自己的工厂(实际上更复杂)。否则,我会保留你的代码。只需确保CodeProviderFactory不会变形为解决所有依赖关系的服务定位器。您看到了吗?