Фабрика в приложении, использующем IoC
От: Poul_Ko Казахстан  
Дата: 05.09.11 03:21
Оценка:
Привет всем.

Имеется .NET приложение, использующее Unity. Возникла необходимость в фабрике объектов — что-то вроде "Абстрактной фабрики" в терминологии GoF.
Конструкторы объектов, которые должна создавать фабрика, можно разделить на категории:
1) "глобальные" сервисы, доступны через IoC-контейнер
2) конфигурационные параметры, их значения определяются при создании фабрики и не должны быть видимы использующему фабрику коду
3) параметры, указываемые при создании объекта, должны быть переданы в метод фабрики

Как реализовать подобную фабрику?
Возможно, у данной задачи есть другое решение?


Покажу псевдокодом.
// Интерфейс фабрики
public interface IFactory<T>
{
  // Методы для создания и конфигурирования фабрики
}


// Пример объекта, который должна создавать фабрика
public sealed class Foo : IFoo
{
  public Foo(
    IService service,    // Значение этого параметра нужно получать из Unity
    String param,        // Значение этого параметра узнаём при конфигурации фабрики
    Context context)     // Значение этого параметра становится известно только перед созданием объекта
  {
  ...
  }
}


// Использование фабрики, в каком-либо классе
public class Bar
{
  public IFactory<IFoo> Factory {get; set};

  public void SomeMethod()
  {
    Context fooContext = ...;           // Значение третьего параметра

    IFoo foo = this.fooFactory.?????    // Код создания объекта
    ...
  }
}


// Создание и конфигурирование фабрики, при запуске приложения
String paramValue = ...;                           // Значение второго параметра

Factory<IFoo> factory = new Factory<IFoo>(???);    // Код создания и
???????                                            // конфигурирования фабрики

Bar bar = ...;
bar.FooFactory = factory;
Brainbench transcript #6370594
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.