作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!