2
我想基於它們的類屬性註冊和解析動態加載的類型。我的代碼如下:基於類屬性/元數據的Autofac解析
自定義類屬性:
[MetadataAttribute]
public class FooIdentifier : Attribute
{
public string Identifier { get; private set; }
public FooIdentifier(string identifier)
{
this.Identifier = identifier;
}
}
我的抽象基類
public abstract class Base
{
public abstract bool Execute(object param);
public bool Run(object param = null)
{
//...
return true;
}
}
我實現類型
[FooIdentifier("230")]
public class Child1 : Base
{
public override bool Execute(object param)
{
throw new NotImplementedException();
}
}
[FooIdentifier("250")]
public class Child2 : Base
{
public override bool Execute(object param)
{
throw new NotImplementedException();
}
}
我不希望有一個硬引用,所以我會手動加載程序集。我的目標是根據class屬性的標識符來解析具體的實現。我已經嘗試了很多與元數據,metadatafrom,鍵等等等等,我現在的嘗試是:
var builder = new ContainerBuilder();
var assembly = Assembly.LoadFrom(@"[PathToAssembly].dll");
builder.RegisterModule<AttributedMetadataModule>();
builder.RegisterAssemblyTypes(assembly)
.Where(t => t.IsSubclassOf(typeof(Base)))
//.As<Base>() or .AsImplementedInterfaces()
.WithMetadataFrom<TaskIdentifier>();
var container = builder.Build();
var child = test.ResolveKeyed<Base>("230"); // here i want to have child1
有人可以幫助我?