Я использую Scrutor для регистрации всех типов в моей сборке, которые реализуют интерфейсы. Однако я хочу исключить типы, которые наследуют неабстрактные типы, которые реализуют интерфейс.
У меня есть структура кода, подобная следующей (все члены типа опущены для краткости):
interface IBar {}
interface IFoobar : IBar {}
class Bar : IBar {}
class Foobar : Bar, IFoobar {}
In Startup.ConfigureServices
:
services.Scan(s => s.FromCallingAssembly().AddClasses(false).AsImplementedInterfaces());
Это приводит к двум регистрациям для IBar
, одна с типом реализации Bar
и одна с типом реализации Foobar
. Мне нужна одна регистрация для IFoobar
(разрешается до Foobar
), которую я получаю, но только одна регистрация для IBar
, которая разрешается до Bar
.
Foobar
, происходит от Bar
потому что это требует функциональности в Bar
, в то время как IFoobar
расширяет IBar
.
Есть ли способ гарантировать, что интерфейс регистрируется только один раз в классе, который наследует его напрямую, а не через базовые классы?