【发布时间】:2021-08-29 22:39:49
【问题描述】:
我正在编写一个与 API 客户端对象一起使用的类,该对象有时会损坏并且必须从使用它的对象内部重新创建。使用依赖注入的最佳方法是什么?我对从类内部调用 DI 框架犹豫不决,因为它使我的代码依赖于它。
public class MyObject
{
protected IMyAPIClient Client { get; set; }
public MyObject(IMyAPIClient client)
{
Client = client;
}
protected async Task<ReturnType> Run<ReturnType>(Func<Task<ReturnType>> action, int attempt = 1)
{
try
{
return await action();
}
catch(Exception exception)
{
Client = await GetNewClient();
if(attempt > MAX_ATTEMPTS)
{
throw new Exception($"Failed {attempt} times", exception);
}
return await Run(action, attempt++);
}
}
protected async Task<IMyAPIClient> GetNewClient()
{
// what to do here?
}
}
我想出的一个解决方案是在一个知道 IMyAPIClient 类型的类中实现 IMyAPIClient 并重新创建它,从而绕过 DI 框架。我想知道这是否明智,或者是否有更好的方法?
【问题讨论】:
-
如果您的 IMyAPIClient 实例不稳定,我会尝试修复它。如果你改写你的问题并添加导致问题的代码,也许这里有人可以找到真正的问题。 BR
-
您使用的是什么 IoC 框架?例如,如果您使用 Autofac,这很容易 - 只需注入一个 func。
-
通常最好找出问题的原因而不是更换它。否则我们永远学不会
标签: c# design-patterns dependency-injection