Фабричный шаблон, возвращающий объекты, для которых требуются другие объекты, которые уже созданы

#c# #repository #factory

#c# #репозиторий #фабрика

Вопрос:

Как мне справиться с ситуацией, когда мой конкретный объект, который вернет мой фабричный объект, зависит от другого объекта, который уже создан.

Для того, чтобы мой репозиторий работал, мне нужно иметь экземпляр объекта connection. Я не хочу создавать новый объект подключения каждый раз при вызове репозитория. Как мне справиться с этой ситуацией? Должен ли я передавать объект connection в RepositoryFactory?

 IRepository<User> userRepository = RepositoryFactory.GetRepository("user");

 public class UserRepository : IRepository<User>
 {
    public DbConnection Connection { get; set; }

    public UserRepository(DbConnection connection)
    {
        this.Connection = connection;
    }
 }
  

Комментарии:

1. Если вы используете EF, знаете ли вы, что DataSet и DbSet уже реализуют шаблон репозитория ?

Ответ №1:

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

Ответ №2:

В MEF вы бы поместили свойство в свой объект factory, который импортирует объект connection. Затем объект factory может предоставлять этот объект connection в качестве параметра конструктора для создаваемых им экземпляров.

Объект соединения может быть создан с помощью MEF composition, или он может быть предоставлен контейнером composition (передается в качестве параметра в контейнер.Составные части).