因为我对 OOP / C# 比较陌生,所以我不知道解决这个问题的正确模式:
我必须为不同的 IO 提供者构建一个插件架构。主机从配置中读取所需的提供者名称/类型,然后应该将提供者实例化并参数化。
所以我基本上有这个接口:
public interface IoProvider //(Base interface, all Providers implements this)
{
void Initialize();
void Execute();
}
public interface IFileProvider: IoProvider
{
string PropertyA { get; set; }
}
public interface ISmtpProvider : IoProvider
{
string PropertyB { get; set; }
string PropertyC { get; set; }
}
如您所见,派生的专用 IO 提供程序具有基本接口所没有的不同附加参数属性。为了避免 if/then/else 或 switch 语句,我的想法是使用工厂模式。
但是,如果我正确理解这一点,它并不能解决我的 if/then/else 问题,因为在客户端上我必须检查派生类型以提供正确的参数。
所以主机上的程序流程是这样的:主机读取配置,获取所需提供者的名称/类型主机调用工厂并获取提供者
但是如何避免这种情况——有没有一种模式可以在没有 if/then/else 的情况下解决这个问题?
If (provider == typeOf(IFileProvider))
PropertyA = value
else if (provider == typeOf(ISmtpProvider))
PropertyB = value
PropertyC = value
Elseif …