如何在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