私は、コードをApp_Code
クラス ライブラリに移動しようとしています。
を使用してプログラムでユーザーを作成しますMembership.CreateUser
。
で構成したメンバーシップ プロバイダーにアクセスできないクラス ライブラリ内でこれを続行するにはどうすればよいweb.config
ですか?
私は、コードをApp_Code
クラス ライブラリに移動しようとしています。
を使用してプログラムでユーザーを作成しますMembership.CreateUser
。
で構成したメンバーシップ プロバイダーにアクセスできないクラス ライブラリ内でこれを続行するにはどうすればよいweb.config
ですか?
コード部分がどのように機能するかを説明する前に、この種のシナリオで設定がどのように読み込まれるかを理解する必要があります。
ファイルをロードする Web アプリケーションがあり.dll
、そのファイルがアプリケーションが構成した.dll
にアクセスする場合、いくつかの仮定を行う必要があります。MembershipProvider
MembershipProvider
MembershipProvider
、そのための設定を提供します。Web.Config
.dll
、.dll
ファイルは Web アプリケーションのディレクトリに含める必要があるため、独自の構成を提供する必要はなく、 Web アプリケーションの構成/bin
に依存できるはずです。
これを行うには、Oded が彼の回答で言及していることから始めます- のコードSystem.Web.Security
内でへの参照を作成し.dll
ます - 次に、そのファイル内で次のようなことができます:
if (Membership.Provider != null) {
Membership.Provider.CreateUser( ... );
} else {
// Do something appropriate in a case where there is no Membership Provider
}
この時点で、上記が機能しない場合は、Web アプリケーションに適切なプロバイダーが構成されていないことが原因である可能性があります。
なぜこのようにするのかについてのメモ...
Web アプリケーションに構成を提供させる必要がある理由は、関心の分離の原則に準拠するためです。はMembershipProvider
、デフォルトの機能を提供する抽象クラスです。実装はほとんどありません。
CreateUser()
つまり、メンバーを管理するには、やなどの操作を実行できる必要があると定義していますGetAllUsers()
。また、 を指定しPasswordFormat
たり、各ユーザーがRequiresUniqueEmail
.
ユーザー情報を保存する場所を教えてくれるわけではありません。それは実装者 (System.Web.Providers.DefaultMembershipProvider
またはYourNS.YourMembershipProvider
) に任せます。
を使用するアプリケーションは、MembershipProvider
提供する設定と使用する実装を決定します。言い換えれば、情報をどのように管理するかを指定するのは仕事ですが、そのストレージでYourNS.YourMembershipProvider
何を使用するかなどを決定するのはおそらくアプリケーションです。ConnectionString
つまり、上で概説したパターンに従って、3 つの個別のレイヤーを提供できます。
MembershipProvider
、MembershipProvider
実装を提供するアセンブリ、およびMembershipProvider
-アプリケーションに代わってそれを使用して何かを行います(*これは、投稿で説明しているレイヤーだと思います)このパターンに従うと、他のレイヤーを変更せずにMembershipProviders
後で切り替えることができることに注意してください。これらのレイヤーは、特定の実装に依存するのではなく、基本クラスに依存しているためです。これは非常に価値があります。MembershipProvider
web.config全体をapp.configにコピーすることで問題を解決しました。コンソールアプリケーションを使用していました。必要なセクションをコピーしたと思っていましたが、すべてをコピーするまで、データはデータベースに取得されませんでした
クラスの名前空間に using ディレクティブを追加しSystem.Web.Security
ます。これにより、クラスに直接アクセスできるようになりますMembership
。
C#:
using System.Web.Security;
VB.NET:
Imports System.Web.Security
メンバーシップ クラスは、ASP.NET プロバイダー システムによって設定された現在のプロバイダーの静的表現であるため、どこからでもアクセスできます。