Autofac을 통해 내 종속성의 IEnumerable을 해결하려고하지만 어떻게 든 정렬 할 수 있어야합니다. 내가이 값을 매핑 할 필요가 물음표에 따라서메타 데이터를 사용하여 자동 채우기
builder.RegisterAssemblyTypes(assemblies.ToArray())
.AssignableTo<IDiscoverable>()
.As<IDiscoverable>()
.AsImplementedInterfaces()
.WithMetadata<DisplayOrderAttribute>(c => c.For(x => x.Order, ???));
:
이것은 등록 코드 : 나는 그것을 달성하기 위해 Autofac의 메타 데이터를 사용하는 거라고,하지만 난 그것이 작동 할 수 없습니다 생각 내 수업에 대한 속성.
[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);