Есть ли способ получить общий завод, когда класс, который он возвращает, требует параметра в конструкторе? Все мои заводы выглядят следующим образом:Возможно ли создать общий завод с конструктором с параметрами с помощью Activator.CreateInstance()?
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)
, но тогда я не могу объявить тип возвращаемого метода и должен был бы его использовать, когда я его назову, чего я хочу избежать.
Есть ли другой подход? Возможно ли это?
@vcsjones Можете ли вы уточнить, что вы имеете в виду? Обычно я использую свои заводы для выполнения DIing (так как вы можете видеть, что для обслуживания нужен репозиторий, и мой завод позаботится об этом). Разве это не потребовало бы конкретной реализации для каждой услуги? Также, пожалуйста, напишите в разделе ответов для репутации! – SventoryMang
Извините, я неправильно понял. – vcsjones
@vcsjones вы были правы, но удаление new() было выполнено. Поэтому, пожалуйста, пишите в разделе ответов! – SventoryMang