2009-02-26 35 views
1

我想在自定义网页控制中实现供应商模式。我仍然试图了解这种模式,并且我有以下问题。供应商模式&DefaultProvider

默认提供程序是我的控件加载时总是要使用的提供程序吗?从我可以告诉供应商使用将始终是默认值,但我不确定,因为MSDN文档说服务器控件允许选择提供程序应该具有默认值为defaultProvider的提供程序属性。对我来说,这意味着只要该提供程序位于Config文件中,控件就可以根据它的Provider属性加载给定的提供程序。那是对的吗?因此,如果没有请求特定提供者,则返回默认提供者。

要更改提供者,我只需更改我的配置文件中的defaultprovider? < - 我认为这是不正确的,因为那只会改变返回的defaultProvider。

是否正确:在控件中,defaultprovider将被加载到控件的OnLoad事件方法中? 我需要根据提供者传递来自不同来源的控制数据,但结果数据将被放入一个类中。该控件将用于呈现它自己。

我也很困惑如何从页面获取数据到控件? 说我的ProviderBase有一个名为LoadData

然后方法在我SQLCustomerProvider我将实现LoadData方法,是否可以将这里定义的代码来阅读我的具体数据,并装入类或应页面使用控制负载数据进入类?

谢谢!

回答

1

我承认了前面,我的供应商的知识仅限于写他们的会员/资料/角色,但一般的东西应该仍然适用:

除非你允许开发的oppertunity指定不同提供者,那么是的,默认提供者是将要使用的提供者。

所以,以认证为例,如果你在你的web.config以下:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20"> 
    <providers> 
    <remove name="AspNetSqlProvider" /> 
    <add name="SqlProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     connectionStringName="SqlServices" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="true" 
     passwordFormat="Hashed" 
     applicationName="/" /> 
    <add name="AdProvider" 
     type="System.Web.Security.ActiveDirectoryMembershipProvider" /> 
    </providers> 
</membership> 

当你在页面上的某个位置添加一个Login控件,然后将使用sqlProvider的。

您可以使用不同的供应商在以下两种方法之一:

  1. 您可以指定使用的登录控制的MembershipProvider性质不同的供应商
  2. 你可以提供一个方法,要在Login控件称为Authenticate事件,在那里你可以选择你的提供者。

方法2的一个例子是:

private void OnAuthenticate(object sender, AuthenticateEventArgs e){ 
    bool authenticated = false; 

    MembershipProvider sqlProvider = Membership.Providers["SqlProvider"]; 

    authenticated = sqlProvider.ValidateUser(Login1.UserName, Login1.Password); 

    if (!authenticated){ 
    // User not found in database, try Active Directory: 
    MembershipProvider adProvider = Membership.Providers["AdProvider"]; 
    authenticated = adProvider.ValidateUser(Login1.UserName, Login1.Password); 
    } 

    e.Authenticated = authenticated; 
} 

你可以这样做你自己控制的其他方式是揭露一个供应商的财产,并检查是否具有价值,并使用该提供者而不是defaultProvider。

一般来说,提供者模型已被用于提供行为的默认设置为已知的类 - 这样的会员供应商都有(例如)的方法GetUser返回一个MembershipUser - 在AspNetSqlMembershipProvider的实施的全部目的GetUser是从ASP.NET SQL数据库加载MembershipUser数据 - 你可以在Sample Membership Provider

中看到这一点,我希望这有助于!