複数のインターフェースに対して同じインスタンスを返す 質問する

複数のインターフェースに対して同じインスタンスを返す 質問する

次のコードを使用してコンポーネントを登録しています。

StandardKernel kernel = new StandardKernel();

string currentDirectory = Path.GetDirectoryName(GetType().Assembly.Location)
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
    if (!Path.GetDirectoryName(assembly.Location).Equals(currentDirectory)) 
        continue;

    foreach (var type in assembly.GetTypes())
    {
        if (!type.IsComponent()) 
            continue;

        foreach (var @interface in type.GetInterfaces())
        kernel.Bind(@interface).To(type).InSingletonScope();
    }
}

次に、2 つのインターフェースを実装するクラスを作成します。

class StandardConsole : IStartable, IConsumer<ConsoleCommand>

解決するとIStartable1 つのインスタンスが取得され、解決するとIConsumer<ConsoleCommand>別のインスタンスが取得されます。

両方のインターフェースで同じインスタンスを取得するにはどうすればよいですか?

ベストアンサー1

builder.RegisterType<StandardConsole>()
   .As<IStartable>()
   .As<IConsumer<ConsoleCommand>>()
   .SingleInstance();

Autofac の非常に広く使用されている機能です。問題が発生した場合は、どこかにバグがあります :)

ニックさん

編集見たところ、IEnumerable<Type>() を受け取る As() のオーバーロードを求めているようです。IntelliSense を使用して As() のオーバーロードをすべて調べてください。シナリオに合うものが見つかるはずです。別のコメント投稿者が指摘したように、すべての情報で質問を更新する必要があります。

おすすめ記事