6

私は、コードをApp_Codeクラス ライブラリに移動しようとしています。

を使用してプログラムでユーザーを作成しますMembership.CreateUser

で構成したメンバーシップ プロバイダーにアクセスできないクラス ライブラリ内でこれを続行するにはどうすればよいweb.configですか?

4

4 に答える 4

4

コード部分がどのように機能するかを説明する前に、この種のシナリオで設定がどのように読み込まれるかを理解する必要があります。

ファイルをロードする Web アプリケーションがあり.dll、そのファイルがアプリケーションが構成した.dllにアクセスする場合、いくつかの仮定を行う必要があります。MembershipProvider

  1. Web アプリケーションにはMembershipProvider
  2. Web アプリケーションはMembershipProvider、そのための設定を提供します。Web.Config
  3. Web アプリケーションは.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 つの個別のレイヤーを提供できます。

  1. を消費するアプリケーションMembershipProvider
  2. MembershipProvider実装を提供するアセンブリ、および
  3. 構成されているものを使用するアセンブリMembershipProvider-アプリケーションに代わってそれを使用して何かを行います(*これは、投稿で説明しているレイヤーだと思います)

このパターンに従うと、他のレイヤーを変更せずにMembershipProviders後で切り替えることができることに注意してください。これらのレイヤーは、特定の実装に依存するのではなく、基本クラスに依存しているためです。これは非常に価値があります。MembershipProvider

于 2012-12-19T19:41:18.833 に答える
1

web.config全体をapp.configにコピーすることで問題を解決しました。コンソールアプリケーションを使用していました。必要なセクションをコピーしたと思っていましたが、すべてをコピーするまで、データはデータベースに取得されませんでした

于 2012-12-17T01:50:48.427 に答える
0

クラスの名前空間に using ディレクティブを追加しSystem.Web.Securityます。これにより、クラスに直接アクセスできるようになりますMembership

C#:

using System.Web.Security;

VB.NET:

Imports System.Web.Security
于 2012-10-27T12:38:29.700 に答える
0

メンバーシップ クラスは、ASP.NET プロバイダー システムによって設定された現在のプロバイダーの静的表現であるため、どこからでもアクセスできます。

于 2012-10-27T12:40:33.417 に答える