我正在尝试通过 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);