编程语言
首页 > 编程语言> > 如何在Factory中重载通用C#方法?

如何在Factory中重载通用C#方法?

作者:互联网

我想创建一个类似工厂的东西,但这不是工厂模式的实现.

我有一个IServiceFactory接口:

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

我想在实现中创建两个不同的服务,以实现两个不同的接口.认为我有:

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");
        }
}

标签:factory,generics,overloading,c
来源: https://codeday.me/bug/20191111/2019131.html