Использование «пустых интерфейсов» при внедрении зависимостей

#c# #.net-core #dependency-injection

Вопрос:

В настоящее время я думаю, является ли использование «пустых интерфейсов» (он же интерфейсы маркеров), которые обычно рассматриваются как запах кода, хорошим подходом при использовании внедрения зависимостей.

Пример:

 interface IWorkspace {  ... // some definitions here }  interface IDynamicWorkspace : IWorkspace { }  interface IStaticWorkspace : IWorkspace { }  class Workspace1 : IDynamicWorkspace  {  ... // IWorkspace implementation }  class Workspace2 : IStaticWorkspace  {  ... // IWorkspace implementation }  class WorkspaceProvider {  IEnumerablelt;IWorkspacegt; GetWorkspaces()  {  if (someCondition)  return diContainer.GetServiceslt;IDynamicWorkspacegt;();  else  return diContainer.GetServiceslt;IStaticWorkspacegt;();  } }  

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

Кстати: Я использую C# и реализацию Microsoft DependencyInjection, но я предполагаю, что эта проблема также применима к другим языкам и фреймворкам.

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

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

2. Обычно фабрика используется для получения определенного экземпляра по условию.