DI + UI
От: baranovda Российская Империя  
Дата: 22.06.09 07:31
Оценка:
Ещё один маленький вопросик по освоению DI. Инструментарий — .NET, Unity и WinForms

Пусть у нас есть клиентский контейнер, в котором регистрируются сервисы доступа к данным, например, экземпляр SqlConnection и сервис, инкапсулирующий некую логику работы с данными:

 

public interface IService
{
   Person GetPerson(int id);
}

public class Service : IService
{
  [Dependency]
  public SqlConnection Connection {get;set;}

  public Person GetPerson(int id)
  {
    var command = Connection.CreateCommand();
    command.CommandText = "...";
    ...
    // Конструируем Person
    Person person = new Person(reader);
    return person;
  }
}

public static void Main()
{
  var connection = new SqlConnection(connectionString);
  container.RegisterInstance<SqlConnection>(connection);
  container.RegisterType<IService, Service>();
}


Теперь собственно вопрос: какой именно объект предпочтительнее впрыскивать в экземпляры экранных форм и других самостоятельных элементов управления?

1) Сам контейнер

public class MyForm : Form
{
  [InjectionConstuctor]
  public MyForm([Dependency] IUnityContainer container) {...}
}


2) Только указатель на интерфейс сервиса

public class MyForm : Form
{
  [InjectionConstuctor]
  public MyForm([Dependency] IService service) {...}
}


4) Всё сразу и чем больше тем лучше

public class MyForm : Form
{
  [InjectionConstuctor]
  public MyForm([Dependency] IUnityContainer container) {...}

  [Dependency]
  public IService Service {get;set;}  

  [Dependency]
  public SqlConnection Connection {get;set;}
}


Спасибо за внимание
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.