我使用洗涤器注册实现接口的程序集中的所有类型。但是,我想排除继承实现接口的非抽象类型的类型.
我有一个类似于以下代码结构的代码结构(为了简洁起见,省略了所有类型成员):
interface IBar {}
interface IFoobar : IBar {}
class Bar : IBar {}
class Foobar : Bar, IFoobar {}在Startup.ConfigureServices中
services.Scan(s => s.FromCallingAssembly().AddClasses(false).AsImplementedInterfaces());这导致了两个IBar注册,一个是实现类型Bar,另一个是实现类型Foobar。我想要的是我得到的IFoobar注册(解析为Foobar),但只需要为IBar注册一个注册,后者解析为Bar。
Foobar源于Bar,因为它需要Bar中的功能,而IFoobar则扩展IBar。
是否有办法确保接口只在直接继承它的类中注册一次,而不是通过基类注册一次?
发布于 2019-10-27 23:33:34
我按照这里 (链接错误地称它为ReplacementStrategy)使用了这里来解决这个问题。在首先注册所有实现的接口之后,我只需搜索并注册一个匹配的接口,但要使用“”RegistrationStrategy。
services.Scan(s => s
.FromCallingAssembly()
.AddClasses(false)
.AsImplementedInterfaces()
.UsingRegistrationStrategy(RegistrationStrategy.Replace(ReplacementBehavior.ImplementationType))
.AsMatchingInterface());这就是我的工作!
https://stackoverflow.com/questions/58582024
复制相似问题