编程语言
首页 > 编程语言> > c#-限制对特定程序集的访问

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

作者:互联网

我正在使用sql server进行Winforms项目,该项目分为多个程序集.

第一个装配实体包含DTO,如:

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

第二个程序集存储库正在访问Sql Server数据库.

第三个组装服务是前一个之间的链接.

还有其他层,但这不是重点.我当然需要在应用程序中的任何地方都有DTO.

在sql server中,Attribution.UserId和User.Id是相同的数据,位于两个单独的表中,并通过“ nner join”链接.

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

目前,我有一个UserService类,其中有一个GetUser()方法,并调用此方法以在AttributionService.GetAttribution()方法中获取用户.

有没有一种方法可以将对Attribution.UserId属性的访问限制为服务程序集?还是在AttributionService类中查询User DTO是一种“违反良好做法”的行为?

非常感谢您的推荐.

`

解决方法:

一种选择是将属性集设为内部,并使用InternalsVisibleTo属性将对内部集的访问权限授予存储库程序集.

另一个技术性和逻辑性较差的选择是将setter设为私有,并让对其进行修改的唯一方法是使用class构造函数.这样,您的存储库就可以建立用户,但是没有人以后可以修改ID.

最后一个选择是,您可以创建一个接口,该接口仅包含非存储库类应具有的访问权限,并将其传递给周围.我不是一个狂热的粉丝,因为这意味着您必须将其强制转换回存储库中的具体类,并且这基本上意味着您的存储库在说谎(例如,它接受ISomething,但是如果ISomething不是确切的,具体的,则抛出该异常.它期望的东西.

标签:net-assembly,c,net,design-patterns
来源: https://codeday.me/bug/20191110/2014744.html