首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scrutor在子接口类型中注册服务

使用Scrutor在子接口类型中注册服务
EN

Stack Overflow用户
提问于 2021-10-31 08:27:30
回答 1查看 86关注 0票数 0

我有以下接口:

代码语言:javascript
复制
public interface IValidator
{
    Task<Response> Validate(object request);
}
代码语言:javascript
复制
public interface IFirstChildValidator : IValidator
代码语言:javascript
复制
public interface ISecondChildValidator : IValidator

我有一些实现第一个和第二个验证器的服务。

在使用Scrutor之前,我手动注册了服务,一切都按预期进行:

代码语言:javascript
复制
services.AddScoped<IFirstChildValidator, FirstBar>();
services.AddScoped<IFirstChildValidator, FirstFoo>();

services.AddScoped<ISecondChildValidator, SecondBar>();
services.AddScoped<ISecondChildValidator, SecondFoo>();

我可以向我的其他服务注入一个特定的验证器:

代码语言:javascript
复制
private readonly IEnumerable<IFristValidator> _firstValidators;
// ctor injection

但是,当我尝试使用Scrutor自动注册(以第一个验证器为例)时:

代码语言:javascript
复制
services.Scan(scan => scan
    .FromAssemblyOf<IFirstChildValidator >()
    .AddClasses(classes => classes
        .InNamespaces("my.namespace")
        .AssignableTo<IFirstChildValidator>())
    .UsingRegistrationStrategy(RegistrationStrategy.Replace(ReplacementBehavior.ImplementationType))
.AsImplementedInterfaces()
.WithScopedLifetim();

注入类型是父验证器(即IValidator),而特定实现的注入数组为空。

如何实现自动注册为特定接口为类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 11:18:49

您必须删除定义如何处理重复项的UsingRegistrationStrategy,在本例中,您需要它的所有实现。

您也可以将其替换为.UsingRegistrationStrategy(RegistrationStrategy.Append)

代码语言:javascript
复制
services.Scan(scan => scan
    .FromAssemblyOf<IFirstChildValidator>()
    .AddClasses(classes => classes
        .InNamespaces("my.namespace")
        .AssignableTo<IFirstChildValidator>())
.AsImplementedInterfaces()
.WithScopedLifetime());

这里是一个.NET FIddle

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69785112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档