該賞金到期in 4天。此問題的答案有資格獲得 100聲望獎勵。 Maroun想引起人們對這個問題的更多關注。
我有以下介面:
public interface IValidator
{
Task<Response> Validate(object request);
}
public interface IFirstChildValidator : IValidator
public 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),具體實作的注入陣列留空。
如何實作將特定介面自動注冊為型別?
uj5u.com熱心網友回復:
您必須洗掉UsingRegistrationStrategythis 定義如何處理重復項,在您的情況下,您需要其所有實作。
您也可以將其替換為 .UsingRegistrationStrategy(RegistrationStrategy.Append)
services.Scan(scan => scan
.FromAssemblyOf<IFirstChildValidator>()
.AddClasses(classes => classes
.InNamespaces("my.namespace")
.AssignableTo<IFirstChildValidator>())
.AsImplementedInterfaces()
.WithScopedLifetime());
這里有一個.NET Fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/346625.html
上一篇:外鍵未顯示在下拉框中|MVC
