gpt4 book ai didi

c# - 除了一个程序集之外,我如何隐藏所有程序集的 "setters"?

转载 作者:行者123 更新时间:2023-11-30 19:21:12 25 4
gpt4 key购买 nike

我在 my other question 中提到过这个问题,但我认为值得将其分解成自己的问题,因为它并不真正依赖于我提到的其他场景。

无论如何 - 到 Q 上,不知道这是否可能。寻找解决方案/解决方法。

我有一个类库,除了 POCO 什么都没有:

MyCompany.MyProject.Domain.POCO

这个程序集有一个像这样的 POCO:

public class Post
{
public int PostId { get; set; }
public int Name { get; set; }
...
}

现在,我有另一个类库,它是我的 DAL/存储库,并使用 Entity Framework 4.0 进行持久化:

MyCompany.MyProject.Repositories

这个程序集有对 POCO 项目的引用,因为它需要对 POCO 执行 CRUD 操作(抓取 DB 对象,项目到 POCO,返回,以及修改 POCO)。

现在,我还有一个 Web 应用程序,它同时引用了 POCO 和存储库程序集。

如果我这样做:

somePOCO.PostId = 10;

我得到一个 SQLException,因为 PostId 是数据库中的一个 IDENTITY 字段,因此不应该被显式设置。

有没有办法隐藏这些特殊属性的setter,以便只有存储库可以访问setter?

我想不出用常规的可访问性修饰符来做到这一点的方法(因为它们都不适合这种情况),你们能想出一个解决方法吗?

最佳答案

您可以将 setter 设为内部,并使内部对存储库程序集可见

[assembly: InternalsVisibleTo("MyLibrary.Repositories")]
public class Post
{
public int PostId { get; internal set; }
public int Name { get; internal set; }
...
}

这意味着一切都可以“获取”那些属性,但只有这个程序集以及包含存储库的程序集可以“设置”

关于c# - 除了一个程序集之外,我如何隐藏所有程序集的 "setters"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com