gpt4 book ai didi

c# - 如何在工厂中重载通用 C# 方法?

转载 作者:行者123 更新时间:2023-11-30 15:57:58 25 4
gpt4 key购买 nike

我想创建类似工厂的东西,但它不是工厂模式的实现。

我有一个IServiceFactory接口(interface):

public interface IServiceFactory
{
TServiceInterface CreateService<TServiceInterface>(string url);
}

我想在我的实现中创建两个不同的服务,它们实现两个不同的接口(interface)。假设我有:

public class FirstService : IFirstService {}
public class SecondService : ISecondService {}

public class ServiceFactory : IServiceFactory
{
public IFirstService CreateService<IFirstService>(string url)
{
// logic of creation
}

public ISecondService CreateService<ISecondService>(string url)
{
// Unforchantly, it's not an overloaded method
}
}

如何以这种方式创建SecondService?我知道我的问题和我的代码示例很糟糕,这是一种不正确的方法,但想知道其他开发人员在这种情况下做了什么。谢谢。

最佳答案

解决您的问题的最简单方法可能是避免完全重载工厂方法(虽然不是很“OO”)。检查泛型类型参数,创建适当的实例,并将其转换回正确的类型:

public class ServiceFactory : IServiceFactory {
public TServiceType CreateService<TServiceType>(string url)
{
Type t = typeof(TServiceType);

if (t == typeof(IFirstService))
return (TServiceType) CreateFirstServiceInstance(url);

if (t == typeof(ISecondService))
return (TServiceType) CreateSecondServiceInstance(url);

throw new InvalidOperationException("Unsupported service type");
}
}

关于c# - 如何在工厂中重载通用 C# 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197689/

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