c# - 限制对特定程序集的访问

标签 c# .net design-patterns .net-assembly

我正在使用 sql server 开发一个 Winforms 项目,分成几个程序集。

第一个程序集 Entities 包含 DTO,例如:

public class Attribution
{
    public short UserId { get; set; }
    public User User { get; set; }
}
public class User
{
    public short Id { get; set; }
}

第二个程序集 Repository 正在访问 Sql Server 数据库。

第三个程序集Service是前面的链接。

还有其他层,但这不是重点。我当然需要应用程序中无处不在的 DTO。

在 sql server 中,Attribution.UserIdUser.Id 是相同的数据,位于 2 个单独的表中,通过 Ìnner join 链接.

Attribution.UserId 必须公开,因为我需要从 RepositoryService 等访问...但我不需要它在应用程序的“逻辑”部分,我需要的是 Attribution.User

此时我有一个 UserService 类,其中有一个 GetUser() 方法,我调用此方法在我的 AttributionService 中获取用户。 GetAttribution() 方法。

有没有办法限制对 Attribution.UserId 属性的访问到 Service 程序集?还是在 AttributionService 类中查询 User DTO 是一种“违反良好做法”?

非常感谢您的推荐。

`

最佳答案

一个选择是制作内部属性的set并使用InternalsVisibleTo属性以授予对存储库程序集内部的访问权限。

另一个不太技术性但更合乎逻辑的选择是将 setter 设为私有(private),并让修改它的唯一方法是类构造函数。这样,您的存储库可以构建用户,但以后没有人可以修改 ID。

作为最后一个选项,您可以创建一个接口(interface),该接口(interface)仅包含非存储库类应该访问的内容并传递它。我不是很喜欢,因为这意味着你必须将它转换回存储库中的具体类,这基本上意味着你的存储库在撒谎(说它接受 ISomething,但如果ISomething 不是它所期望的准确、具体的 Something

关于c# - 限制对特定程序集的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47469207/

相关文章:

c# - 加载 System.Web 失败但加载 System.Xml 成功

c# - 快速正则表达式问题

.net - OAuth2 - 将访问 token 返回给用户是否安全?

c# - 如何使用 C# 中的矢量化计算 double 矩阵的总和?

javascript - 构建真实世界的 AngularJS 应用程序,我应该如何在 html 中声明我的 Controller 。我需要在index.html中声明所有内容吗?

c# - 使用 EPplus 向 Excel 添加文本

c# - Xamarin.Forms 中的多个阶梯 slider

.net - 如何使用 Ninject Conventions 库绑定(bind)到不是接口(interface)的基本类型?

c# - 在存储库模式中使用接口(interface)优于抽象类的优势?

c# - 如何将 sqldatareader 转换为 dto 列表?