ASP.NET的登录模型
你能帮我解决我的问题吗 我有一个ASP.NET网站,它有一些基本的授权功能(登录/注销e.t.c.)。目前我有3种主要方法:ASP.NET的登录模型,asp.net,login,design-patterns,Asp.net,Login,Design Patterns,你能帮我解决我的问题吗 我有一个ASP.NET网站,它有一些基本的授权功能(登录/注销e.t.c.)。目前我有3种主要方法: bool登录(字符串名称、字符串密码) bool IsLogged() 字符串GetUserID() 所有这些方法都“硬编码”到一个类中。登录方法检查数据库以确定用户是否存在。但后来我决定使用XML文件来存储用户,这意味着检查用户的所有逻辑都应该重写 我想使用以下“模式”: 创建接口(例如ILoginProvider),声明上述3种方法 在任何类中实现此接口,并在Lo
- bool登录(字符串名称、字符串密码)李>
- bool IsLogged()李>
- 字符串GetUserID()李>
class LoginHelper {
private static ILoginProvider provider;
// this method should be called somewhere in Application_Startup event in Global.asax
public static void RegisterLoginProvider(ILoginProvider inst) {
provider = inst;
}
}
然后写下必要的方法:
public static bool IsLogged() {
return provider.IsLogged();
}
然后在应用程序启动事件中调用Global.asax中的RegisterLoginProvider()方法:
MyCustomProvider prov = new MyCustomProvider(); // this class implements ILoginProvider interface
LoginHelper.RegisterSecurityProvider(prov);
使用其他“提供者”更改某些“提供者”是否是实现此类逻辑的正确方法?通常通过服务定位器(Unity、StructureMap等)或自定义工厂执行此操作,您在其中请求ILoginProvider的实例并返回正确的实例 选择要创建哪种ILoginProvider的责任并不取决于调用类
//get a login provider from via a service locator
ILoginProvider provider = DependencyLookup.Resolve<ILoginProvider>();
//通过服务定位器从获取登录提供程序
ILoginProvider provider=DependencyLookup.Resolve();
使用服务定位器,您可以在XML配置或代码中针对ILoginProvider注册要使用的实现。这里有一个团结的例子
public static class ContainerConfiguration
{
public static void Configure()
{
ServiceLocator.Current.RegisterType<ILoginProvider, XmlLoginProvider>();
}
}
公共静态类容器配置
{
公共静态void Configure()
{
ServiceLocator.Current.RegisterType();
}
}
您试图抽象出登录功能,这非常好。此外,还必须通过DependencyInjection将此帮助程序绑定到页面,即必须向类中添加一个以LoginInterface为参数的构造函数。然后,您可以使用StructureMap等实用工具在运行时获取实例
通过使用这些接口,我们可以为将来的情况提供适应性,在这些情况下,您可以移动到DB或webservice。通常,您可以使用基于提供程序的配置模型在web.config中定义提供程序,并选择默认的提供程序。这就是SiteMapProviders、MemberShipProviders、RoleProviders等的实现方式,以及遵循defactor标准的良好实践。遵循标准是良好实践,但不是必要的,此外,哪种实现方式超出了这个问题的范围。但是如何找出我应该使用哪种ILoginProvider呢?也许我应该在web.config中保存一个类名,然后以如下方式将其传递给我的LoginHelper类:LoginHelper.RegisterLoginProvider(Activator.CreateInstance(“my_class_name_From_web.config))?IoC和依赖项查找对我来说很难理解…如果您使用其中一个服务定位器,所有的艰苦工作都会为您完成。好的,它会变得更清楚。但是什么是ServiceLocator?它是Unity或MS Enterprise Library的一个类还是一个简单的示例?ThanksI指的是Unity、结构图、Castle Windsor等的使用。