- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我收到这个错误 -
错误:错误:静态解析符号值时遇到错误。调用函数“SecurityModule”,不支持函数调用。考虑用导出函数的引用替换函数或 lambda ...
我读到函数调用不能太复杂以至于静态分析器无法处理,但您可以看到这应该是直截了当的。我不确定为什么会失败。
我看过几个使用长格式提供者对象的示例,据我所知,这应该是可以接受的。
这是项目-
https://github.com/savantly-net/ngx-security
有什么想法吗?
安全模块 -
import { ISecurityService } from './ISecurity.service';
import { NgModule, ModuleWithProviders, Optional, SkipSelf, InjectionToken } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserComponent } from './user/user.component';
export const SECURITY_SERVICE = new InjectionToken<ISecurityService>('security.service');
@NgModule({
imports: [
CommonModule
],
exports: [ UserComponent ],
declarations: [ UserComponent ]
})
export class SecurityModule {
static forRoot(securityService: ISecurityService): ModuleWithProviders {
return {
ngModule: SecurityModule,
providers: [{
provide: SECURITY_SERVICE,
useValue: securityService
}]
};
}
constructor (@Optional() @SkipSelf() parentModule: SecurityModule) {
if (parentModule) {
throw new Error(
'SecurityModule is already loaded. Import it in the AppModule only');
}
}
}
应用模块 -
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { SecurityModule, SecurityMockService } from '@savantly/ngx-security';
export const mockSecurity = new SecurityMockService();
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
SecurityModule.forRoot(mockSecurity)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
SecurityMockService -
@Injectable()
export class SecurityMockService implements ISecurityService {
logout: () => void;
login: (username: string, password: string) => boolean;
user: IUser;
constructor() {
this.user = {
principal: 'demoUser',
displayName: 'Demo User',
authenticated: false,
roles: ['ADMIN', 'USER']
};
this.login = (_username: string, _password: string) => {
this.user.authenticated = true;
return true;
};
this.logout = () => {
this.user.authenticated = false;
};
}
}
最佳答案
好的,这是简单的解决方法:
使用 SecurityModule.forRoot(new SecurityMockService())
而不是
export const mockSecurity = new SecurityMockService();
SecurityModule.forRoot(mockSecurity)
但是来了。你真的应该像 Graham 说的那样使用 useClass
,因为这会让你的服务实例化成为 Angular 。
关于 'useValue' 提供者的 Angular 4 静态分析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141105/
我有以下代码片段: Mapper.CreateMap() .ForMember(x => x.CompanyId, opt => opt.UseValue(_companyId)); Mapp
useValue 和 useFactory 提供者有什么区别? useFactory 似乎返回一个值,useClass 也返回一个值。 最佳答案 useFactory 采用预期返回值的工厂函数,并且还
我在 Controller 中使用 Automapper,但在第一次调用后数据没有被刷新。 public class Somethings { public int Id {get; set;
为什么UseValue只执行一次?我需要为每个请求调用 TeamRepository。 我怎样才能做到这一点? 从 TeamEmployee 到 TeamEmployeeInput 的映射: Crea
我收到这个错误 - 错误:错误:静态解析符号值时遇到错误。调用函数“SecurityModule”,不支持函数调用。考虑用导出函数的引用替换函数或 lambda ... 我读到函数调用不能太复杂以至于
我有以下代码模拟来自服务的数据: providers: [ { provide: AdminService, useValue: { avcData: { runMode: 'NORM
我正在尝试构建一个 React Native 应用程序。我在终端上发现了一个错误说Unable to resolve "./useValue" from "node_modules\react-nat
在编写单元测试时,我遇到了奇怪的情况,我不明白问题出在哪里。 我已经准备好重现的短代码: TestInjectable - 简单的可注入(inject)类 @Injectable() class Te
我想知道为什么当我想通过 useValue 字段提供特定值时 Angular 2 提供程序语法不起作用。 例如,在我的 app.module.ts 中 // Abstracted base class
Angular 2 高级测试文档: userServiceStub = { isLoggedIn: true, user: { name: 'Test User'} }; TestBed.co
我使用 window.location 设置可注入(inject)。在我靠近导入的模块中,我定义了变量 const flag = window.location.search.includes('fl
我需要在 Angular 2 中为 dart 添加一个“外部”对象到依赖注入(inject)。 “外部”的意思是,它的构造函数上没有 @Injectable 注释,因为它来自外部库。 所以我想,我可以
当 Angular 4.0.2 应用程序提前编译时,提供者定义为 useValue import { OpaqueToken, Provider } from '@angular/core'; exp
我是 Angular 4 的新手,我刚刚通过 Angular Cli 创建了一个项目,但出现错误 Uncaught TypeError: useValue,useFactory,data is not
我是一名优秀的程序员,十分优秀!