Недавно я стал тяжелым пользователем функции Autofac OwnedInstances. Например, я использую его для создания factory для создания Единицы работы для моей базы данных, что означает, что мои классы, которые зависят от UnitOfWork factory, запрашивают объекты типа:
Func<Owned<IUnitOfWork>>
Это невероятно полезно - отлично подходит для сохранения IDisposable из моих интерфейсов - но он поставляется с ценой: поскольку Owned < > является частью сборки Autofac, Я должен ссылаться на Autofac в каждом из моих проектов, который знает о Owned < > и помещает "использование Autofac.Features.OwnedInstances" в каждый файл кода.
Func < > имеет большое преимущество в том, чтобы быть встроенным в платформу .NET, поэтому я не сомневаюсь, что для использования Func в качестве универсальной обертки factory следует использовать Func. Но Owned < > находится в сборке Autofac, и каждый раз, когда я его использую, я создаю жесткую ссылку на Autofac (даже если моя единственная ссылка на Autofac - это тип Owned < > в аргументе метода интерфейса).
Мой вопрос: это плохо? Это начнет укусить меня в некотором роде, что я еще не учею? Иногда у меня будет проект, на который ссылаются многие другие проекты, и поэтому, естественно, мне нужно максимально приблизить его зависимости до нуля; Я делаю зло, передавая Func < Owned < IUnitOfWork → (который фактически является поставщиком транзакций базы данных) в методы на этих интерфейсах (что в противном случае было бы автоактивным)?
Возможно, если Owned < > был встроенным типом .NET, вся эта дилемма исчезла бы? (Должен ли я даже задержать дыхание, чтобы это произошло?)