防止在当前程序集之外实例化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才能将其用作对象

正准备创建一个工厂来创建一个新实例,而不是每次都创建一个消息实例(复制代码),但后来我意识到创建消息的方法不止一种。

有没有办法防止在程序集外部直接实例化数据对象?

防止在当前程序集之外实例化MongoDB数据模型或防止滥用

你不能在 mongo 中为序列化创建 privateinternal 属性,但你可以使属性的 setter privateinternal(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类运行。