我有以下接口:
public interface IValidator
{
Task<Response> Validate(object request);
}public interface IFirstChildValidator : IValidatorpublic interface ISecondChildValidator : IValidator我有一些实现第一个和第二个验证器的服务。
在使用Scrutor之前,我手动注册了服务,一切都按预期进行:
services.AddScoped<IFirstChildValidator, FirstBar>();
services.AddScoped<IFirstChildValidator, FirstFoo>();
services.AddScoped<ISecondChildValidator, SecondBar>();
services.AddScoped<ISecondChildValidator, SecondFoo>();我可以向我的其他服务注入一个特定的验证器:
private readonly IEnumerable<IFristValidator> _firstValidators;
// ctor injection但是,当我尝试使用Scrutor自动注册(以第一个验证器为例)时:
services.Scan(scan => scan
.FromAssemblyOf<IFirstChildValidator >()
.AddClasses(classes => classes
.InNamespaces("my.namespace")
.AssignableTo<IFirstChildValidator>())
.UsingRegistrationStrategy(RegistrationStrategy.Replace(ReplacementBehavior.ImplementationType))
.AsImplementedInterfaces()
.WithScopedLifetim();注入类型是父验证器(即IValidator),而特定实现的注入数组为空。
如何实现自动注册为特定接口为类型?
发布于 2021-11-02 11:18:49
您必须删除定义如何处理重复项的UsingRegistrationStrategy,在本例中,您需要它的所有实现。
您也可以将其替换为.UsingRegistrationStrategy(RegistrationStrategy.Append)
services.Scan(scan => scan
.FromAssemblyOf<IFirstChildValidator>()
.AddClasses(classes => classes
.InNamespaces("my.namespace")
.AssignableTo<IFirstChildValidator>())
.AsImplementedInterfaces()
.WithScopedLifetime());这里是一个.NET FIddle
https://stackoverflow.com/questions/69785112
复制相似问题