Есть ли способ достичь универсальной фабрики, когда класс, который она возвращает, требует параметра в конструкторе? Все мои заводы выглядят так:
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;
}
Однако это, конечно, не сработает, потому что я не могу использовать класс, у которого нет конструктора без параметров, в качестве универсального параметра, но я чувствую, что я близок. Я думал о передаче класса Service, как GetService(Type serviceClassType)
, но тогда я не могу объявить тип возвращаемого значения метода, и мне придется приводить его при вызове, чего я хочу избежать.
Есть ли другой подход? Это вообще возможно?