1

Autofac を使用して依存関係の IEnumerable を解決しようとしていますが、何らかの方法でそれらを並べ替える必要があります。それを達成するためにAutofacのメタデータを使用したいと思っていましたが、機能させることはできません:

これは登録コードです:

builder.RegisterAssemblyTypes(assemblies.ToArray())
    .AssignableTo<IDiscoverable>()
    .As<IDiscoverable>()
    .AsImplementedInterfaces()
    .WithMetadata<DisplayOrderAttribute>(c => c.For(x => x.Order, ???));

したがって、疑問符では、値をクラスの属性にマップする必要があります。

[DisplayOrder(5)]
public class Test : IDiscoverable
{
}

[DisplayOrder(1)]
public class Test : IDiscoverable
{
}

それらを解決すると、ソートされたコレクションを取得できるようになります。

public class Client
{
    public Client(IEnumerable<Meta<IDiscoverable>> discoverables)
    {
       //sort it using metadata here
       var sortedDiscoverables = discoverables.Sort(x => x.Order).Select(x => x.Value);
    }
}

とにかくAutofacでそれを達成するには?

[更新]型指定されていないメタデータを使用して次のことを行うことができますが、型指定されたメタデータ オブジェクトを使用してそれを行う方法が見つからないようです。

.WithMetadata("Order", x => x.GetAttribute<DisplayOrderAttribute>().Order);
4

1 に答える 1