防止在当前程序集之外实例化MongoDB数据模型或防止滥用
本文关键字:数据模型 MongoDB 实例化 前程 程序集 | 更新日期: 2023-09-27 18:34:10
我设置了一个mongo数据库,如果它被设计为使用强类型对象:
public class Message : IDatabaseObject
{
[DataMember]
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[DataMember]
public string MessageBody { get; set; }
}
该类和所有属性必须是公共的,MongoDB才能将其用作对象
我正准备创建一个工厂来创建一个新实例,而不是每次都创建一个消息实例(复制代码),但后来我意识到创建消息的方法不止一种。
有没有办法防止在程序集外部直接实例化数据对象?
你不能在 mongo 中为序列化创建 private
或 internal
属性,但你可以使属性的 setter private
或internal
(mongo C# 驱动程序将负责用于序列化和反序列化的私有资源库)。
使构造函数和资源库成为内部或私有(基于您的用例)
public class Message
{
[DataMember]
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; internal set; }
[DataMember]
public string MessageBody { get; internal set; }
internal Message() { }
}
public static class MessageFactory
{
public static Message Create()
{
return new Message();
}
}
您可以公开像 DatabaseObjectFactory.Create<Message>()
或 Message.Create()
这样的公共工厂方法,同时保持构造函数internal
甚至private
。
如果在编译时无法实例化类就足够了,Fody 可能是您想要的。具体Publicize.Fody
.
它允许您将类编写为internal
。编译它。然后让它作为public
类运行。