Ещё один маленький вопросик по освоению 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;}
}
Спасибо за внимание