【发布时间】:2012-01-24 20:42:40
【问题描述】:
当它返回的类需要构造函数中的参数时,有什么方法可以实现泛型工厂?我所有的工厂都是这样的:
public static class UserServiceFactory
{
public static UserService GetService()
{
UserRepository userRepository = new UserRepository();
return new UserService(userRepository);
}
}
我尝试过这样的事情:
public static TServiceClass GetService<TServiceClass>()
where TServiceClass : class, new()
{
TServiceClass serviceClass = null;
string repositoryName = typeof (TServiceClass).ToString().Replace("Service", "Repository");
Type type = Type.GetType(repositoryName);
if (type != null)
{
object repository = Activator.CreateInstance(type);
serviceClass = (TServiceClass)Activator.CreateInstance(typeof (TServiceClass), new[]{repository});
}
return serviceClass;
}
但是,这当然行不通,因为我不能使用没有无参数构造函数的类作为泛型参数,但我觉得我很接近。我考虑过像 GetService(Type serviceClassType) 这样传递 Service 类,但是我无法声明该方法的返回类型,并且在调用它时必须强制转换它,我想避免这种情况。
还有其他方法吗?这甚至可能吗?
【问题讨论】:
-
@vcsjones 你能详细说明你的意思吗?通常,我使用我的工厂进行 DIing(如您所见,该服务需要一个存储库,而我的工厂负责处理)。这不是再次需要每个服务的具体实现吗?也请在代表的答案部分发帖!
-
@vcsjones 你是对的,但删除 new() 有效。所以请先生在答案部分发帖!
标签: c# generics factory-pattern