我正在使用Srutor8.1注册实现接口的程序集中的所有类型(ASP.NET核心6)。
我有一个类似于以下代码结构的代码结构(为了简洁起见,省略了所有类型成员):
services.AddSingleton(typeof(IRepository<>), typeof(Repository<>));我在program.cs中使用这段代码
builder.Services.Scan(scan => scan
.FromAssemblies(Assembly.GetExecutingAssembly())
.FromAssemblyOf<IUnitOfEntity>()
.AddClasses()
.UsingRegistrationStrategy(RegistrationStrategy.Skip)
.AsMatchingInterface()
.WithTransientLifetime());但我知道这个错误:
一些服务无法构造(在验证服务描述符的ServiceType时出错:
Microsoft.AspNetCore.Authorization.IAuthorizationService生命周期:瞬态ImplementationType:
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService':在试图激活‘TIR.NetCore.BaseLoginService’时无法解析“TIR.NetCore.IUnitOfEntity”类型的服务。)(验证服务描述符‘ServiceType时出错:
Microsoft.AspNetCore.Authorization.IAuthorizationHandlerProvider生命周期:瞬态ImplementationType:
Microsoft.AspNetCore.Authorization.DefaultAuthorizationHandlerProvider':
在试图激活‘TIR.NetCore.BaseLoginService’时,无法解析“TIR.NetCore.IUnitOfEntity”类型的服务。)(验证服务描述符‘ServiceType时出错:
Microsoft.AspNetCore.Authorization.Policy.IPolicyEvaluator生命周期:瞬态ImplementationType:
Microsoft.AspNetCore.Authorization.Policy.PolicyEvaluator':在试图激活'TIR.NetCore.BaseLoginService'.)时无法解析“TIR.NetCore.IUnitOfEntity”类型的服务
发布于 2022-04-04 09:40:23
FromAssemblyOf<>,FromAssembliesOf -扫描包含提供的Type或Types的程序集。
AddClasses() -添加所有公共的、非抽象的类。
AddClasses(publicOnly) -添加所有非抽象类。将publicOnly=false设置为添加内部/私有嵌套类。
AddClass(predicate) -运行一个任意的操作来筛选哪些类包括。这是非常有用和广泛使用的,如下所示。
AddClasses(predicate, publicOnly) -前两种方法的组合。
因此,您可以更改代码如下:
builder.Services.Scan(scan => scan
.FromAssemblyOf<ITest>()
.AddClasses(classes => classes.AssignableTo<ITest>())
.UsingRegistrationStrategy(RegistrationStrategy.Skip)
.AsImplementedInterfaces()
.WithTransientLifetime());https://stackoverflow.com/questions/71725268
复制相似问题