注意:我正在使用MongoDB C#Driver 2.0
我想复制BsonConstructor属性的行为,但使用BsonClassMap API。
这样的事情:
BsonClassMap.RegisterClassMap<Person>(cm =>
{
cm.AutoMap();
cm.MapCreator(p => new Person(p.FirstName, p.LastName));
});
但无需指定每个参数。
我想这样做的原因是我不想因实施问题而“污染”我的域模型。
我找到了这个(SetCreator)
BsonClassMap.RegisterClassMap<Person>(cm =>
{
cm.AutoMap();
cm.SetCreator(what goes here?);
});
但我不知道如何使用SetCreator函数,如果它做了我认为它做的...
答案 0 :(得分:1)
我使用约定而不是BsonClassMap
获得了相同的结果这是一个示例(从只读公共属性读取(序列化)和写入(反序列化)到构造函数)
public class MongoMappingConvention : IClassMapConvention
{
public string Name
{
get { return "No use for a name"; }
}
public void Apply(BsonClassMap classMap)
{
var nonPublicCtors = classMap.ClassType.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);
var longestCtor = nonPublicCtors.OrderByDescending(ctor => ctor.GetParameters().Length).FirstOrDefault();
classMap.MapConstructor(longestCtor);
var publicProperties = classMap.ClassType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead);
foreach (var publicProperty in publicProperties)
{
classMap.MapMember(publicProperty);
}
}
}