Как внедрение зависимостей применимо к этому сценарию? - PullRequest
1 голос
/ 09 июля 2011

Я использую Ninject для конструктора, чтобы создавать мои конкретные объекты на лету. Тем не менее, у меня есть сценарий, где класс содержит метод, который принимает строку. Основываясь на значении строки, я хотел бы получить определенный класс. Я достиг этого, создав фабричный класс для возврата конкретного класса, но не был уверен, что это лучший способ. Есть предложения?

//Service class
public int GetEmployeeVacationDays(string employeeType)
{
  IEmployee employee = EmployeeFactory.CreateEmployee(employeeType);
  return employee.VacationDays();
}

//Factory class
public static IEmployee CreateEmployee(string employeeType)
{
   if(employeeType == "Salary")
   {
      return new SalariedEmployee();
   }
   else
   {
      return new HourlyEmployee();
   }
}

Ответы [ 2 ]

3 голосов
/ 09 июля 2011

Внедрение зависимостей не относится к вашему сценарию.Это фабричный образец.Вы можете настроить Ninject для использования фабричного шаблона для предоставления зависимостей, если вы хотите для определенных объектов.

Фактически вы можете полностью заменить фабричный шаблон именованными привязками:

Bind<IEmployee>().To<FooEmployee>().Named("foo");
Bind<IEmployee>().To<BarEmployee>().Named("bar");
Bind<IEmployee>().To<BazEmployee>().Named("baz");
2 голосов
/ 09 июля 2011

при условии, что employeeType является допустимым именем класса:

return System.Activator.CreateInstance(Type.GetType(className))
...