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);