当使用同一服务的多个实现时,指定Orchard CMS应该注入哪个依赖项的最佳方法是什么?
例如,我需要能够在我的开发环境中使用Web服务使用者类的Fake / Mock实现,但在Test / UAT / Production环境中,我需要使用真正的实现。 例如 接口:
public interface IWebServiceClient : IDependency {...}
真正的实施:
public class WebServiceClient : IWebServiceClient {...}
假实施:
public class FakeWebServiceClient : IWebServiceClient {...}
例如,在非Orchard站点上使用Autofac我可能会使用ConfigurationSettingsReader并将我的伪依赖项指定为web.config中的覆盖。对于非调试部署,将通过web.config转换删除这些覆盖。
答案 0 :(得分:2)
最简单的方法是将每个功能都设为一个功能。
[OrchardFeature("MyModule.Live")]
public class WebServiceClient : IWebServiceClient {...}
[OrchardFeature("MyModule.Test")]
public class FakeWebServiceClient : IWebServiceClient {...}
然后在Module.txt中定义这些功能,并在您的计算机上启用测试并在uat / live中生活
答案 1 :(得分:1)
您总是可以为每个项目的配置定义编译时常量,类似于默认情况下DEBUG的工作方式。这样,您可以使用预处理器指令单一实现接口并改变行为。