コードをApp_Code
からクラスライブラリに移動する処理中です。クラスライブラリのMembership.CreateUser()
Membership.CreateUser
を使用してプログラムでユーザーを作成します。
私はweb.config
に設定したメンバーシッププロバイダにアクセスできないクラスライブラリ内でこれをやり続けますか?
コードをApp_Code
からクラスライブラリに移動する処理中です。クラスライブラリのMembership.CreateUser()
Membership.CreateUser
を使用してプログラムでユーザーを作成します。
私はweb.config
に設定したメンバーシッププロバイダにアクセスできないクラスライブラリ内でこれをやり続けますか?
クラス内のSystem.Web.Security
名前空間にusingディレクティブを追加すると、Membership
クラスに直接アクセスできます。
C#:
using System.Web.Security;
VB.NET:
Imports System.Web.Security
既にメンバーシップクラスにアクセスできます。クラスライブラリ内ではweb.configを読み取ることができないため、web.configファイルで設定したSQL Severではなく、デフォルトのプロバイダを使用しているようです。 – Chris
@Chris - クラスライブラリは何らかのコンテキストで動作します。クラスライブラリは、実行されるアプリケーションの設定にアクセスします。 – Oded
私のクラスライブラリの中で、私は 'MembershipUser NewUser = Membership.CreateUser(userName、password、email、"無回答 "、"無回答 "、true、out createStatus); パスワードを" wonder123" 、これがデフォルト(なし非アルファ)によって許容可能ではなく、アプリケーションのweb.configファイルは、このあります '<会員defaultProvider = "MyProviderを"> \t \t \t
あなたはメンバーシップクラスbecouseどこでもアクセスできるASP.NETプロバイダシステムによってsetted現在のプロバイダの静的な表現です。
私はapp.configにweb.config全体をコピーすることで問題を解決しました。私はコンソールアプリケーションを使用していました。私は必要なセクションをコピーしたと思ったが、すべてをコピーするまで、データはデータベースに到達していなかった
コードパートの仕組みを説明する前に、このようなシナリオでどのように設定が読み込まれるかを理解する必要がある。
あなた.dll
ファイルをロードしようとしているWebアプリケーションがある - と.dll
ファイルは、アプリケーションが構成されているMembershipProvider
にアクセスしようとしていること - あなたは、いくつかの仮定を行う必要があります。
.dll
正しくがあなたの.dll
ファイルに含まれなければならないのでロードMembershipProvider
Web.Config
MembershipProvider
の設定を提供しています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.DefaultMembershipProvider
またはYourNS.YourMembershipProvider
)に任せます。
MembershipProvider
を使用するアプリケーションは、提供する設定と使用する実装を決定します。言い換えれば、情報の管理方法を指定するのはYourNS.YourMembershipProvider
の仕事ですが、そのストレージなどで何を使用するかを決定する必要があります。
したがって、上記のパターンに従って、 MembershipProvider
を消費するアプリケーション、
MembershipProvider
実装を提供アセンブリ、及びいずれを使用MembershipProviders
を切り替えることができます - とアプリケーションの代わりにそれで何かをあなたがこのパターンに従うならばというお知らせ(*これは、私は信じて、あなたの記事で記述している層です)後でのいずれかの他のレイヤーを変更する必要はありません。 - 特定の実装に頼るのではなく、これらのレイヤーが基本クラスMembershipProvider
に依存しているためです。これは非常に貴重です。
お返事ありがとう – codingbiz
おめでとうございました。 :)私はさまざまなプロジェクトでこれを何度もやらなければなりませんでした。動きのある部分を理解するために、最初の数回はどれほどイライラしたのか覚えています。 –
asp.netアプリケーションにクラスがありますが、web.configの情報にアクセスできません。独自のweb.configを持つフォルダにありますか? – Paparazzi