gpt4 book ai didi

c# - 使用相同的接口(interface)调用多个类

转载 作者:太空狗 更新时间:2023-10-30 01:18:19 24 4
gpt4 key购买 nike

我有一个像

这样的界面
public interface IAddressProvider
{
string GetAddress(double lat, double long);
}

在我的消费类中,我想循环遍历具体的提供者,直到我得到一个结果,比如(简化):

string address;
address = _cachedAddressProvider.GetAddress(lat, long);
if(address == null)
address = _localDbAddressProvider.GetAddress(lat, long);
if(address = null)
address = _externalAddressProvider.GetAddress(lat, long);

return address ?? "no address found";

然后我可以模拟每个提供程序以进行单元测试,将 null 设置为返回值以适本地测试所有代码路径。

我如何将接口(interface)注入(inject)我的消费类(最好使用 StructureMap)以便正确解析每个具体实现?

最佳答案

您有多个地址提供者这一事实不是调用代码必须处理的事情。因此,创建一个特定的提供者代理来处理这些多个提供者。

像这样。

public interface IAddressProvider {
string GetAddress(double lat, double long);
}

public class AddressProviderProxy: IAddressProvider {
public AddressProviderProxy(IAddressProvider[] providers) {
_providers = providers; // TODO: Add a NULL guard
}

private readonly IAddressProvider[] _providers;

string IAddressProvider.GetAddress(double lat, double long) {
foreach (var provider in _providers) {
string address = provider.GetAddress(lat, long);
if (address != null)
return address;
}
return null;
}
}

// Wire up using DI
container.Register<IAddressProvider>(
() => new AddressProviderProxy(
new IAddressProvider[3] {
cachedAddressProvider,
localDbAddressProvider,
externalAddressProvider
}
)
);

// Use it
IAddressProvider provider = ...from the container, injected..
string address = provider.GetAddress(lat, long) ?? "no address found";

关于c# - 使用相同的接口(interface)调用多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com