IoC с зависимостями типа значения и типа объекта

Я ищу предложения относительно лучшего способа проектирования объектов для IoC

Предположим, у меня есть объект (служба), который имеет зависимость от DataContext, зарегистрированного в Ioc.

Но для этого также требуется свойство name, я мог бы спроектировать объект следующим образом:

class Service
{
    public Service(IDataContext dataContext, 
        string name)
    {
        this._dataContext = dataContext;
        this._name = name
    }

    public string Name
    {
        get
        {
            return _name;
        }
    }
}

Проблема в том, что становится очень сложно использовать с контейнерами Ioc, поскольку строковый объект, такой как name, нелегко зарегистрировать, и использование становится осложняется с контейнером Ioc: Таким образом, разрешение становится запутанным:

var service = Ioc.Resolve<Service>( ?? )

Другой подход состоит в следующем:

class Service
{
   public Service(IDataContext dataContext)
   {
        this._dataContext = dataContext;
   }

    public string Name { get; set; }
} 

Разрешение теперь проще:

var service = Ioc.Resolve<Service>();
service.Name = "Some name";

Единственным недостатком является указание имени, которое больше не требуется. Я хотел бы услышать от экспертов по DI или IoC, как они будут проектировать это, оставаясь при этом довольно безразличным к технологии конкретных контейнеров Ioc.

Я знаю, что многое зависит от того, как вы хотите это использовать, вариант 2 был бы идеальным, если бы имя действительно было необязательным. Но в случае, когда требуется имя, вы можете добавить этап проверки в другой момент кода, а лучше перейти к дизайну, чтобы упростить Ioc.

Мысли?

8
задан Adam Rackis 14 November 2011 в 16:42
поделиться