C# 在存储库类中使用成员类

C# 在存储库类中使用成员类,c#,asp.net-mvc,repository-pattern,C#,Asp.net Mvc,Repository Pattern,我创建了一个存储库类,如下所示: public class ProfileRepository : IProfileRepository { private Guid _userIdentifier = (Guid)Membership.GetUser().ProviderUserKey; .... } 每当我没有登录到我的站点并且尝试导航到一个[Authorize]筛选页面时,它将在我的存储库类上私有Guid\u userIdentifier

我创建了一个存储库类,如下所示:

public class ProfileRepository : IProfileRepository
    {

        private Guid _userIdentifier = (Guid)Membership.GetUser().ProviderUserKey;
        ....
    }
每当我没有登录到我的站点并且尝试导航到一个
[Authorize]
筛选页面时,它将在我的存储库类上
私有Guid\u userIdentifier=(Guid)Membership.GetUser().ProviderUserKey处抛出一个错误(
对象引用未设置为对象的实例。


filter属性无法捕获用户未经过身份验证的事实。要在repository类中获取当前登录用户的
ProviderUserKey
,以便在整个repository类中使用,最好的方法是什么?

请控制反转

存储库不负责查找用户标识符。无论如何,您实际上是在为声明空间中的私有成员赋值。我知道C#允许您这样做,但请检查代码是如何在封面下编译的,并养成这样编码的习惯。最后,声明应该只是声明


我需要查看您的呼叫代码,以便进一步帮助您。另外,您没有提到您的成员资格提供者的类型。

不是答案,但我不确定您的存储库是否应该依赖于成员资格类。为什么不将用户ID传递给相应的方法?@DStanley只是觉得将用户ID传递到一堆方法中可能是多余的,似乎更干净,但如果它有缺陷,那么我想我必须更改我的方法。当用户未登录时,查询的结果应该是什么?“有缺陷”可能很强大-您可以通过使用
IMembershipProvider
或一些可以解耦存储库的接口来改进它。对依赖项注入进行一些研究,然后自己决定。@Iboshuizen配置文件存储库不用于允许未经授权的用户访问的网站的任何部分,但输入这些信息让我意识到,最好只传入一个guid,在我的控制器中有一个私有变量,并每次传入,这可能是一个更好的解决方案,因为我的类也可以在未经身份验证的情况下使用。-1 a)您并没有真正提供替代解决方案。b) 成员资格提供程序类型无关紧要。A)替代解决方案不是在变量初始化中赋值,而是实际查看其编译代码以了解其错误。。。b) 是的,类型很重要。你知道GetUser()是抽象的,对吗?