Autofac重试逻辑

时间:2018-03-07 15:26:51

标签: c# asp.net autofac

我有一个ASP.NET应用程序,它利用SingleInstance()服务客户端(通过VNET连接到集群),在应用程序启动时我有5秒延迟/重试/延迟/重试循环来初始化服务,但是一旦它初始化了autofac就会占用我的服务客户端并随之运行。

我的问题是,如果我的服务客户端失去了通过VNET的连接,我如何强制Autofac重用我的初始化逻辑?这可能是以惯用的自动方式做的吗?

这是初始化代码:

builder.Register(c => ClusterClient.Initialize(timeout: 5/*seconds*/)).SingleInstance();

1 个答案:

答案 0 :(得分:0)

首先,无论ClusterClient.Initialize()返回什么,您都需要配置Autofac来解析对该特定类的依赖关系,这意味着某些类对该类型的任何内容都具有硬依赖性。

要解决这个问题,请执行以下操作:

  1. 定义一个接口,描述您的类将使用此对象执行的操作。
  2. 创建一个"包装器"实现该接口的类。该类可以在内部调用ClusterClient.Initialize()并管理该方法返回的内部实例。该类还可以处理重试逻辑。
  3. 以前依赖于ClusterClient.Initialize()返回的任何课程,请将其修改为取决于您的新界面。
  4. 使用Autofac注册包装器类作为接口的实现。
  5. 现在你的类取决于抽象,你的容器不必关心重试逻辑。

    至于重试逻辑本身,Polly是一个Nuget包,可以很容易地定义重试策略。