Существует несколько возможных решений:
1) Нужно ли ClassA проводить различие между фильтрами или нужно просто запустить их оба? Если нет, вы можете изменить конструктор так, чтобы он принимал массив, что приведет к внедрению всех зарегистрированных экземпляров IWordTokensFilter:
public ClassA(IWordTokensFilter[] filters)
Затем вы можете использовать фильтры для применения.
2) Если вам нужно их дифференцировать, поскольку они должны использоваться по-разному, вы можете рассмотреть возможность использования одного из них, чтобы лучше описать его назначение. ClassA затем может быть изменен на IWordTokensFilter и ICategoryFilter (или как вы называете интерфейс маркера). Зарегистрируйте CategoryFilter с помощью ICategoryFilter, и тогда оба будут введены правильно.
public ClassA(IWordTokensFilter stopWordsFilter, ICategoryFilter categoryFilter)
3) Вы можете явно указать StructureMap, как создать ClassA:
ForRequestedType<ClassA>().TheDefault.Is.ConstructedBy(c => {
return new ClassA(c.GetInstance<StopWordsFilter>(), c.GetInstance<CategoryFilter>());
});
4) Вы можете указать StructureMap переопределить одну из зависимостей для ClassA:
x.ForRequestedType<ClassA>().TheDefault.Is.OfConcreteType<ClassA>()
.CtorDependency<IWordTokensFilter>("stopWordsFilter").Is<StopWordsFilter>();