2

私の質問は非常に簡単です。インターフェイスと具象型ごとにすべての実装を登録する必要があります。

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();
container.RegisterAutoWired<AuthenticationManager>();

デフォルトのシングルトン ライフサイクルを使用しています。それらが同じインスタンスに解決されることを確認したいのですが、私のテストでは、最終的に 2 つのインスタンスになることが示されています。

if (!ReferenceEquals(container.Resolve<IAuthenticationManager>(),
                     container.Resolve<AuthenticationManager>()))
{
    throw new ApplicationException("multiple instances");
}

ここで単一のインスタンスを使用する方法はありますか?

4

1 に答える 1

4

これを 2 回登録すると、タイプごとに新しいインスタンスが作成されます。1 つはインターフェース用で、もう 1 つは具象タイプ用です。

同じシングルトン インスタンスが必要な場合は、最初に自動配線されたインスタンスを登録してから、同じインスタンスを解決する他のタイプに対して登録します。

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();

そしてどちらか

container.Register(c => (AuthenticationManager)c.Resolve<IAuthenticationManager>());

また

var instance = (AuthenticationManager)container.Resolve<IAuthenticationManager>();
container.Register(instance);
于 2013-03-22T00:11:57.483 に答える