在.NET中有没有一个标准的接口可以在Redis和Rabbit之间切换?

vwoqyblh  于 2022-10-31  发布在  Redis
关注(0)|答案(1)|浏览(105)

我想知道是否有一个.NET接口,使Redis和兔子之间的过渡,而没有(大)的代码变化?
万一我最终想把Rabbit换成Redis,因为在我的测试中,我需要更高的性能,例如。
我想用一个界面来轻松地完成这个任务。
这可能吗?

qvtsj1bj

qvtsj1bj1#

这是一个典型的反转控制示例,您希望推迟实现细节。
正如注解中所建议的,这是通过应用程序特定的接口实现的。因此,为了使您的代码对修改关闭,需要将其放置在单独的项目中,您还需要在其中定义接口,例如

public interface IService
{
    Task DoSomethingAsync(CancellationToken cancellationToken);
}

然后为Rabbit和Redis分别创建一个项目(每个项目都有更进一步的、专门的Nugets来处理特定的通信)。
现在的诀窍是在每个项目实现接口IService和方法实现时都将使用底层提供者。
这样,一旦你需要Rabbit,你就有了单独的项目,你只需再次实现接口,但使用Rabbit提供程序。
并且,您可以将使用什么实现的决定推迟到调用代码,这是组合根,您在其中定义服务。

services.AddScoped<IService, RabbitService>();

并且在任何地方都使用IService的示例。
一旦需要切换,只需将上面的行更改为:

services.AddScoped<IService, RedisService>();

...因此,您可以在几乎不更改代码的情况下进行更改。
如果您的依赖注入配置位于某个外部配置中(这并不广泛应用),您甚至不必接触代码。

相关问题