Dependency injection 使用nestjs在通用服务中动态注入存储库

Dependency injection 使用nestjs在通用服务中动态注入存储库,dependency-injection,authorization,nestjs,Dependency Injection,Authorization,Nestjs,我正在为我的nestjs应用程序构建授权服务 对于我应用程序上的每个受保护资源(Media,Game,…),我都有一个关联的*RoleEntity,GameRoleEntity,…),它定义了用户可以对特定资源执行的操作。每个*RoleEntity实现RoleEntityInterface: 导出接口角色标题接口{ 资源:T; 用户:用户实体; 角色:字符串; } 每个受保护的实体(MediaEntity,GameEntity,…)都扩展了ResourceEntity 现在我想构建一个通用的提

我正在为我的nestjs应用程序构建授权服务

对于我应用程序上的每个受保护资源(
Media
Game
,…),我都有一个关联的
*RoleEntity
GameRoleEntity
,…),它定义了用户可以对特定资源执行的操作。每个
*RoleEntity
实现
RoleEntityInterface

导出接口角色标题接口{
资源:T;
用户:用户实体;
角色:字符串;
}
每个受保护的实体(
MediaEntity
GameEntity
,…)都扩展了
ResourceEntity

现在我想构建一个通用的提供者
RoleService
,负责数据库交互:

@Injectable()
出口类角色服务{
只读角色存储库:存储库;
异步读取(roleDto:Partial):承诺{
返回此.roleRepository.findOne({
其中:{……roleDto},
});
}
异步创建(roleDto:roleDto | roleDto[]):承诺{
等待此。角色还原。插入(roleDto);
}
}
我想把这项服务注入警卫,拦截器

问题是,我不知道怎么做,更准确地说:

  • 如何动态注入角色还原?(我想一定要有某种工厂参与进来。)
实际用例

我希望能够通过一名警卫保护资源:

@Injectable()
导出类RoleGuard实现CanActivate{
建造师(
私有authService:authService,
私人角色服务:角色服务,
专用只读反射器:反射器,
) {}
...
}
现在在控制器中,当我使用

@Role('Admin'))
@UseGuards(RoleGuard)
得到()
...
如果整件事都能神奇地工作,那就太完美了:),即正确的角色服务和正确的角色定位都被正确地注入

我对nestjs和typescript完全陌生(也从来没有玩过angular),所以可能整个方法都错了