Я пытаюсь ввести два класса в свой конструктор, проблема в том, что они оба одного и того же интерфейса. Моя регистрирующий является:Введение в конструктор конструктора Unity с подразумеваемыми именами
container.RegisterType<ITrackerSection, ScopeSection>();
container.RegisterType<ITrackerSection, SampleSection>();
Как вы можете видеть, что они оба типа ITrackerSection но имеют разные реализации. Мой конструктор выглядит следующим образом:
public TrackerEngine(ITrackerSection scopeSection, ITrackerSection sampleSection)
Оба эти параметры вводятся как sampleSection, как это было в прошлом должны быть зарегистрировано для данного типа интерфейса. У меня нет никаких проблем с именами зарегистрированных типов, например
container.RegisterType<ITrackerSection, ScopeSection>("scopeSection");
container.RegisterType<ITrackerSection, SampleSection>("sampleSection");
Но это сейчас означает, что я должен указать параметры классов и что кажется беспорядочным и добавляя зависимость, когда единство больше, чем способно решить их. Кроме того, регистрацию TrackerEngine также необходимо будет указать параметры. Я знаю, что я мог бы использовать атрибут в строке в конструкторе TrackerEngine, но я бы предпочел Unity вывести объекты по именам.
Может ли Unity (я не могу заставить это работать) правильно внедрить правильную реализацию интерфейса исключительно из имени, заданного параметру в конструкторе? Поэтому ITRAckerSection scopeSection является тем же именем, что и при регистрации ScopeSection, поэтому используйте этот тип.
Почему эти два класса реализуют один и тот же интерфейс? Ваш дизайн кажется неоднозначным. Если вы дадите им каждый свой собственный интерфейс, все ваши проблемы исчезнут. – Steven
Создание интерфейсов, специфичных для каждого типа, кажется анти-шаблоном. Интерфейс определяет структуру, которую должны иметь все эти разделы. IScopeSection: ITrackerSection, по-видимому, является дополнительным кодом для решения проблемы, которая не должна существовать. –
неоднозначность также является анти-шаблоном. – Steven