Как обычно, с такими вопросами, ответ таков: Это зависит ™ . Это зависит от проблемы, которую вы пытаетесь решить. Хотя этот вопрос помечен как инъекция зависимостей и инверсия контроля (в некоторой степени та же идея ), ни один из них не является самоцелью, но только средство для достижения правильной цели.
Обычно целью является разделение поведения . Это приводит к первому вопросу, затем:
Почему CreateInstance
возвращает ICar
экземпляров?
Я предполагаю, что ICar
- это интерфейс. Является ли ICar
полиморфным? У вас есть несколько реализаций этого интерфейса?
Объект с именем car звучит для меня как сущность, и эти обычно не должны вводиться , поскольку они обычно представляют данные, а не поведение.
Ради аргумента, однако, давайте предположим, что ICar
действительно полиморфен.
Как показано здесь, CarFactory
выглядит детерминированным. Трудно сказать, хотя, потому что не вся реализация показана. Если, однако, это относительно прозрачно , то зачем его вообще инициализировать?
Разве это не может быть статической функцией?
public static class CarFactory
{
public static ICar CreateInstance(string carName)
{
// choose type of class from all classes that implement ICar
Type t = GetTypeToCreate(carName);
return Activator.CreateInstance(t) as ICar;
}
// some more code...
}