【发布时间】:2017-05-26 09:05:14
【问题描述】:
我想创建类似工厂的东西,但它不是工厂模式的实现。
我有一个 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?我知道我的问题和我的代码示例很糟糕,这是一种不恰当的方法,但想知道其他开发人员在这种情况下会做什么。谢谢。
【问题讨论】:
-
我将使用由 IFirstService 和 ISecondService 扩展的通用 IAnyService 空接口(一个普通的空“标记”接口)。在我看来,这当然不是最好的方法,我也对其他答案感兴趣!
-
您应该能够在类中使用它,就像在接口中一样,使用泛型方法类型
public T CreateService<T>(string url)然后在函数内部您可以检查 T 的类型,例如if (T is IFirstService)但是为什么不单独使用工厂模式,我猜它确实解决了你的问题。
标签: c# generics overloading factory