我试图从静态运行非静态方法,并在非静态方法中使用依赖注入。 (我试图在一个班级内做这个)
我的代码看起来像这样:
public class Tokens
{
private IRefreshTokenRepository refreshTokenRepository;
public Tokens(IRefreshTokenRepository refreshTokenRepository)
{
this.refreshTokenRepository = refreshTokenRepository;
}
// I understand that problem is there, but I should to write this
//constructor because otherwise I can not use class variable in static method
public Tokens()
{
}
public static async Task<string> GenerateJwt()
{
RefreshToken rf = new RefreshToken{...};
Tokens t = new Tokens();
t.StoreRefToken(rf);
return JsonConvert.SerializeObject(...);
}
public async void StoreRefToken(RefreshToken reft)
{
this.refreshTokenRepository.InsertRefreshToken(reft);
await refreshTokenRepository.SaveAsync();
}
}
正如您从代码中理解的那样,当我写“Tokens t = new Tokens();”时此代码使用了构造函数而没有导入存储库。该怎么办?我可以在单班内修理吗?
谢谢
附:如果问题很愚蠢我很抱歉
静态和依赖注入不能很好地结合在一起。
将Tokens
保留为实例类并对其进行抽象
public interface ITokenService {
Task<string> GenerateJwt();
}
这样它就可以作为依赖注入。
从抽象中导出Tokens
public class Tokens: ITokensService {
private readonly IRefreshTokenRepository refreshTokenRepository;
public Tokens(IRefreshTokenRepository refreshTokenRepository) {
this.refreshTokenRepository = refreshTokenRepository;
}
public async Task<string> GenerateJwt() {
RefreshToken rf = new RefreshToken{...};
await StoreRefToken(rf);
return JsonConvert.SerializeObject(...);
}
private async Task StoreRefToken(RefreshToken reft) {
this.refreshTokenRepository.InsertRefreshToken(reft);
await refreshTokenRepository.SaveAsync();
}
}
现在,您可以访问所需的成员作为依赖项