如何从单个类中的静态运行非静态方法并使用依赖注入C#

问题描述 投票:1回答:1

我试图从静态运行非静态方法,并在非静态方法中使用依赖注入。 (我试图在一个班级内做这个)

我的代码看起来像这样:

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();”时此代码使用了构造函数而没有导入存储库。该怎么办?我可以在单班内修理吗?

谢谢

附:如果问题很愚蠢我很抱歉

c# asp.net .net oop dependency-injection
1个回答
1
投票

静态和依赖注入不能很好地结合在一起。

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();
    }
}

现在,您可以访问所需的成员作为依赖项

© www.soinside.com 2019 - 2024. All rights reserved.