6

リポジトリから取得する Wallet クラスがあります。ウォレットを使用するクラスに適切なインスタンスが注入されるように、両方を Autofac に適切に登録しようとしています。問題は、リポジトリが非同期メソッド (タスクを返す) を使用していることです。Autofac はそのようなケースをサポートしていますか?

これは機能しません:

cb.RegisterType<WalletRepository>()
    .As<IWalletRepository>()
    .SingleInstance();
cb.Register(async c => await c.Resolve<IWalletRepository>().CreateAsync(App.WalletPath));
cb.RegisterType<ViewModel>()
    .AsSelf().
    .SingleInstance();

私が持っているアプリのどこかに:

class ViewModel
{
    public ViewModel(Wallet wallet)
    {
        //nothing fancy here
    }
}

呼び出すcontainer.Resolve<ViewModel>()と、ウォレットが登録されていないという例外が発生します。

4

3 に答える 3

1

これにより、デッドロックが発生する可能性があります。Autofac は、さまざまな有効期間スコープの解決を処理するロジックの一部でロックを使用しています。したがって、非同期ファクトリ操作が別のスレッドで何かを解決しようとすると、デッドロックが発生します

于 2015-05-13T10:57:34.543 に答える