Asp.net mvc ASP.NET成员资格:自定义配置文件继承
我使用的是ASP.NET MVC4,我已经设置了一个自定义概要文件类,如本文所述 我还更新了web.config上配置文件定义的条目:Asp.net mvc ASP.NET成员资格:自定义配置文件继承,asp.net-mvc,asp.net-membership,membership-provider,Asp.net Mvc,Asp.net Membership,Membership Provider,我使用的是ASP.NET MVC4,我已经设置了一个自定义概要文件类,如本文所述 我还更新了web.config上配置文件定义的条目: <profile defaultProvider="DefaultProfileProvider" inherits="MembershipTestsV3.Models.CustomProfile"> <providers> <add name="DefaultProfileProvider" typ
<profile defaultProvider="DefaultProfileProvider" inherits="MembershipTestsV3.Models.CustomProfile">
<providers>
<add name="DefaultProfileProvider"
type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"
applicationName="MyAppName" />
</providers>
</profile>
现在,我希望有许多类型的配置文件继承自这个基础;例如AdminUserProfile或SupervisorProfile:
public class SupervisorProfile : CustomProfile
{
public string Department
{
get { return this["Department"] as string; }
set { this["Department"] = value; }
}
}
但是,每次尝试强制转换对象时,都会出现空引用异常:
var customProfile = HttpContext.Profile as SupervisorProfile;
我知道在数据库级别,概要文件只会将所有相关列保存在同一个表中,我只想在服务层上组织属性。有什么方法可以实现这一点吗?在ProviderModel内部是不可能的,但如果在其周围构建一个层,就可以实现这一点。你可以走几条路:
- 将相关信息保存在另一个表中,并在配置文件中保存对该信息的引用。然后,您可以只保留一个简单的概要文件类,并使用存储库或其他相关类来获取额外的信息(可以是带有子类型的基类型)。这将有利于对象组合而不是继承
- 保留一个具有所有属性的简单概要文件类。与直接从HttpContext获取概要文件不同,您可以在其周围构建一个层(如果愿意,可以使用工厂),该层检查实例并根据概要文件中的值返回不同的类型
public class SupervisorProfile : CustomProfile
{
public string Department
{
get { return this["Department"] as string; }
set { this["Department"] = value; }
}
}
var customProfile = HttpContext.Profile as SupervisorProfile;