2012-10-27 19 views
6

我在移動碼出App_Code到類庫的過程。Membership.CreateUser()是一個類庫

我創建的用戶編程方式使用Membership.CreateUser

我怎麼能繼續這樣做,我的類庫那裏是給會員提供我在web.config配置進不去裏面?

+0

您在asp.net應用程序中有一個類,但它無法訪問web.config中的信息?它是否在自己的web.config文件夾中? – Paparazzi

回答

0

在您的班級中爲System.Web.Security名稱空間添加使用指令 - 這將使您可以直接訪問Membership類。

C#:

using System.Web.Security; 

VB.NET:

Imports System.Web.Security 
+0

已經可以訪問成員資格類。因爲在類庫內部它不能讀取web.config,它似乎使用了一些默認提供程序,而不是我在web.config文件中配置的SQL Sever。 – Chris

+0

@Chris - 一個類庫將在某個上下文中運行 - 它將有權訪問它所運行的應用程序的配置。 – Oded

+0

在我的班級圖書館裏面,我會打電話: 'MembershipUser NewUser = Membership.CreateUser(userName,password,email,「no question」,「no answer」,true,out createStatus);' 「密碼爲」 wonder123" ,這是不是默認(沒有非-α),但可以接受該應用的web.config具有這樣的: '<成員defaultProvider = 「MYPROVIDER」> \t \t \t \t \t \t \t <添加 \t \t \t \t name =「MyProvider」 ** minRequiredNonalphanumericCharacters =「0」** ...\t \t \t \t /> \t \t \t \t \t' 所以如果看完上面,它將接受 「wonder123」 作爲密碼,而不是我得到createStatus.InvalidPassword。 – Chris

0

您可以在任何地方訪問它becouse Membership類是由ASP.NET提供系統設置好的當前提供的靜態表示。

1

我被整個web.config文件複製到我的app.config解決了我的問題。我正在使用控制檯應用程序。我以爲我已經複製的必要部分,但直到我複製一切,該數據沒有得到數據庫

4

之前,我告訴你的代碼部分如何工作 - 你需要了解的設置獲得如何在這種情況下的裝起來。

當你有哪些是要加載.dll文件的Web應用程序 - 這.dll文件要訪問該應用程序已配置MembershipProvider - 你必須做出一些假設。

  1. Web應用程序有一個MembershipProvider
  2. Web應用程序在其Web.Config
  3. Web應用程序提供了用於MembershipProvider設置載入你.dll正確

因爲你.dll文件應包括在Web應用程序的/bin目錄中,您應該可以依靠Web應用程序的配置而不是必須提供自己的。

要做到這一點,開始什麼俄德提到了他的答案 - 那麼該文件中,你可以做類似如下 - 在您.dll的代碼創建到System.Web.Security參考:

if (Membership.Provider != null) { 
    Membership.Provider.CreateUser(...); 
} else { 
    // Do something appropriate in a case where there is no Membership Provider 
} 

在這點 - 如果上述不起作用,很可能是因爲您的Web應用程序沒有配置適當的提供程序。

了一份關於爲什麼做這樣...

的原因,你應該讓Web應用程序提供的配置是符合的Separation of Concerns原則。MembershipProvider是一個提供默認功能的抽象類 - 幾乎沒有實現。

換言之 - 它定義了要管理成員,您需要能夠執行諸如CreateUser()GetAllUsers()之類的操作。它還表示您應該可以配置設置,例如指定PasswordFormat並確定每個用戶是否爲RequiresUniqueEmail

它沒有做的是告訴你在哪裏存儲你的用戶信息。它留給實現者(System.Web.Providers.DefaultMembershipProviderYourNS.YourMembershipProvider)。

然後使用MembershipProvider的應用程序確定要提供什麼設置以及要使用哪個實現。換句話說 - 這是YourNS.YourMembershipProvider指定信息如何管理的工作,但它很可能是應用程序誰應該確定在存儲中使用哪些ConnectionString等。

因此 - 遵循上面列出的模式,您可以提供三個獨立的層:

  1. 應用這將消耗其提供MembershipProvider實施MembershipProvider
  2. 的組件,和
  3. 其使用取其的組件10配置 - 並做一些事情與它代表的應用程序(*這就是你在帖子中描述層,我相信)

注意,如果按照這種模式 - 你現在可以切換MembershipProviders在以後的時間,而不必改變其他層 - 因爲這些層依賴於基類MembershipProvider - 而不是依賴於您的具體實現。這可能非常有價值。

+1

感謝您的支持 – codingbiz

+0

很高興幫助。 :)我不得不在不同的項目中多次這樣做 - 我記得最初幾次是多麼令人沮喪,因爲要弄清楚運動部件。 –

相關問題