编辑:我稍微改变了问题,意识到通过在工厂创建方法中指定类型参数可能会混淆问题。我有两种类型的 API 调用需要对第三方 API 进行访问。第一个使用 int 作为 Id 检索 API 中的记录。第二个也从 API 中检索记录,但 Id 是字符串 (guid)。我有两个类(ClientEntity 和 InvoiceEntity),它们都实现了一个通用接口,我在其中传入 Id 类型。
这是我声明一个带有 id 参数的方法的接口。
public interface IGeneric<TId>
{
void ProcessEntity(TId id);
}
我在几个类中实现了这个接口,其中一个将id设置为整数,另一个将id设置为字符串。
public class ClientEntity: IGeneric<int> // Record with Id that is an int
{
public void ProcessEntity(int id)
{
Console.WriteLine(id);
// call 3rd party API with int Id
}
}
public class InvoiceEntity: IGeneric<string> // Record with Id that is a string (guid)
{
public void ProcessEntity(string id)
{
Console.WriteLine(id);
// call 3rd party API with string Id
}
}
我想知道如何在工厂模式中使用它?
public static class GenericFactory
{
public static IGeneric<WhatGoesHere> CreateGeneric(string recordType)
{
if (recordType == "Client")
{
return new ClientEntity();
}
if (type == "Invoice")
{
return new InvoiceEntity();
}
return null;
}
}
目标是使用工厂实例化正确的类,以便我可以调用ProcessEntity方法。
编辑
我不想在工厂方法中传递泛型类型,因为由工厂创建的类应该处理它。当我创建对象时,我不知道需要什么类型的Id,我希望工厂来处理。
例如:
var myGeneric = GenericFactory.CreateGeneric("Client");
myGeneric.ProcessEntity("guid")
或
var myGeneric = GenericFactory.CreateGeneric("Invoice");
myGeneric.ProcessEntity(1234)
我希望那很有意义。
Id
和一个以Id
作为参数的方法,这让人感到困惑。你确定这是你想要做的吗?如果是,你应该明确两个值之间的区别。 - Rikobject
,这对你来说可能没有太大用处... 除非你使用dynamic
,但我建议不要这样做... - Matthew Watson