微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C# 中使用委托参数重构为泛型方法

如何解决在 C# 中使用委托参数重构为泛型方法

所以我有下面的方法,但在将它们转换为使用通用 dbcontext 时遇到了问题。这里有什么想法吗?

        public static async Task ExecuteScopeAsync<TDbContext>(this IServiceScopeFactory scopeFactory,Func<IServiceProvider,Task> action)
            where TDbContext : DbContext
        {
            using var scope = scopeFactory.CreateScope();
            var dbContext = scope.ServiceProvider.GetrequiredService<TDbContext>();

            try
            {
                //await dbContext.BeginTransactionAsync();

                await action(scope.ServiceProvider);

                //await dbContext.CommitTransactionAsync();
            }
            catch (Exception)
            {
                //dbContext.RollbackTransaction();
                throw;
            }
        }

这是他们调用方法

        public static Task ExecuteDbContextAsync<TDbContext>(Func<TDbContext,Task> action) where TDbContext : DbContext 
            => ExecuteScopeAsync<TDbContext>(sp => action(sp.GetService<TDbContext>()));

我为第一个尝试了类似的方法(以及许多其他迭代),但似乎无法正确使用语法

class Loginviewmodel: ObservableObject {

    @Published var email: String = ""
    @Published var password: String = ""

    @Published private (set) var errorAlert: Alerts? = nil
    @Published private (set) var token: Token? = nil

    private let webservice: Webservice
    private var cancellables = Set<AnyCancellable>()

    init(webservice: Webservice) {
        self.webservice = webservice
        
        $token
            .sink { token in
                KeychainWrapper.save(token: token)
            }
            .store(in: &cancellables)
    }

    func login() {
        let user = User(username: email,password: password)

        webservice
            .authenticate(user)
            .sink(receiveCompletion: { [weak self] completion in
                if completion == .failure(_) {
                    self?.errorAlert = .authenticationError
                }
            },receiveValue: { [weak self] token in
                self?.token = token
            })
            .store(in: &cancellables)
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。