我有以下绑定代码
Kernel
.Bind<IWeinCadDocument>()
.To<ADocument>().Named(ADocument._TypeId_.ToString());
Kernel
.Bind<IWeinCadDocument>()
.To<BDocument>().Named(BDocument._TypeId_.ToString());
Kernel
.Bind<IWeinCadDocument>()
.To<CDocument>().Named(CDocument._TypeId_.ToString());
这个想法是,一些数据将使用容器的TypeId进行序列化,该容器需要构造才能容纳它。每个类都有一个静态字段 Guid _TypeId _ 。这意味着我可以通过Guid获得正确类型的新文档;
Guid id = data.TypeId;
var container = Kernel.Get<IWeinCadDocument>(id);
container.SetData(data);
我有很多IWeinCadDocument类型,我想干掉绑定代码,所以我不必复制粘贴它。
答案 0 :(得分:0)
我可以劫持用于COM互操作的GuidAttribute,而不是在我的类中添加 TypeID 字段。例如
[Guid("4882176A-751A-4153-928A-915BEA87FAB3")]
public class ADocument : WeinCadDocumentBase<ADocument>
{
public ADocument( IWeinCadDocumentStorage storage )
: base(storage)
{
}
public override object PersistentData
{
get
{
return new DocumentData(10, 20);
}
}
}
和
var documentTypes = new[]
{
typeof (ADocument), typeof (BDocument), typeof (CDocument)
};
foreach (var documentType in documentTypes)
{
Kernel.Bind<IWeinCadDocument>()
.To(documentType)
.Named(documentType.GUID.ToString());
}
如果我选择但是循环是关键,我可以在扩展方法中包装上面的代码。