如何让wcf服务负责选择连接字符串,并在没有基类的情况下很好地清理单元测试

如何让wcf服务负责选择连接字符串,并在没有基类的情况下很好地清理单元测试,wcf,unit-testing,inheritance,Wcf,Unit Testing,Inheritance,当我们编写新代码时,我们首先对本地数据库进行测试,然后对共享开发数据库进行测试。我们所有的服务调用都将ServiceCallContext对象作为参数,它使用该对象为数据库连接选择适当的连接字符串。在这些服务的网络配置中,我添加了指向本地和共享开发数据库的“本地”和“共享开发”连接 我的第一个倾向是创建一个所有服务都可以从中继承的通用基本服务类。泛型参数将是一个代理类,基类将负责使用适当的连接字符串(它根据ServiceCallContext从webconfig中选择)创建此代理 Service

当我们编写新代码时,我们首先对本地数据库进行测试,然后对共享开发数据库进行测试。我们所有的服务调用都将ServiceCallContext对象作为参数,它使用该对象为数据库连接选择适当的连接字符串。在这些服务的网络配置中,我添加了指向本地和共享开发数据库的“本地”和“共享开发”连接

我的第一个倾向是创建一个所有服务都可以从中继承的通用基本服务类。泛型参数将是一个代理类,基类将负责使用适当的连接字符串(它根据ServiceCallContext从webconfig中选择)创建此代理

ServiceCallContext还包含一个属性,服务可以查看该属性,以查看是否正在从单元测试调用它,如果是,则它将保留代理,并创建代理并将其重新用于后续调用。这样做的原因是,单元测试中的所有内容都可以在单个事务上运行,并在最后回滚。当然,如果一个特定的服务需要调用另一个服务,这会带来一个潜在的问题,因为它没有任何方式来共享事务,所以它可能会锁定它调用的服务需要使用的表


我的团队领导不喜欢一开始就使用基本服务类的想法,我倾向于同意他的观点,但这肯定会让我们90%的工作更轻松。我想知道的是,WCF是否提供了更好的方法,通过某种扩展来完成同样的事情,这比使用基类要好?

无意冒犯,但我认为您的设计和单元测试的原则是错误的。我也不知道使用基类将如何解决事务性问题。@CodeCaster-None。这对我来说是一个相当新的领域,所以请随意阐述或指导我进一步阅读。