2011-01-26 7 views
0

実際にカスタムprofileProviderを使用して情報を取得するASP.NET MVCサイトを開発しています(訪問した最後のページ、グリッドで表示するレコードの最大数、メール経由の通知など)カスタムデータベースに格納されている単一のユーザーに関連しています。 私はprofileProviderがeasely injectableではないので、このテクニックが嫌いです。プロファイルプロバイダが公開しているのと同じ機能を得る別の方法がありますか?私はおそらくasp.netモジュールを使用することが可能だと思うが、私は専門家ではない。asp.netのprofileproviderの代わりmvc

答えて

1

私は、プロバイダ(カスタムのProfileProviderも)がインスタンス化され、外部コード(System.Web.Configuration.ProvidersHelper)によって制御されるということを意味します。

依存性注入パターンでは、カスタムプロバイダが依存するオブジェクトはコントローラ(またはコンテナ)によって渡される必要があります。 Cfr。 Dependency Injection for Loose Coupling)。通常、コントローラはリポジトリ、datacontext、またはその他のオブジェクトを初期化し、コンストラクタまたはプロパティを介して渡します。しかし、それは 'コントローラ'がSystem.Web.Configurationに封印されているので、カスタムプロバイダでは不可能です。

私は質問よりも、ProvidersHelperがカスタムプロバイダをどのようにインスタンス化して制御するかに影響を与える方法があると思いますか?

+0

私はウィンザー[ここ](http://bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html)を使って答えを見つけました。 – flip

+0

こんにちはフィリップ、あなたの応答のおかげで、私はそれを試してみましょう。 – tartafe

+0

私はいくつかの実装を見つけました。 [this](http://www.davidhayden.com/blog/dave/archive/2007/10/30/CreateCustomProfileProviderASPNET2UsingLINQToSQL.aspx)ServiceLocatorと[this](http://noahblu.wordpress.com/2009/)を使用しています02/19/custom-membershipprovider-using-repository-dependency-injection-pattern-magic /)StructureMap。私はあなたが他のすべてのDIのためにページとUserControlsを使用することができるので、私はASP.Netのための過剰なものだと思ういくつかの種類のIoCツールを使用します。私は同じ問題で苦労しているので、あなたがそれをどのように扱っているか教えてください。 – flip

0

正確には注射が容易ではありません。

あなたがコントローラーにそれを必要としないという意味であれば、データを表示するのに必要なユーザー情報のモデルを追加するアクションフィルターを作成します。

プロファイル情報を使用しているSystem.Web依存関係を望まない場合は、IProfileServiceのようなアダプタインターフェイスを作成し、それをプロファイルプロバイダラッパーで実装します。

私が推測した2つのことのいずれかを意味するわけではない場合は、言語が少し不明であるため説明してください。

+0

こんにちは、プロファイルプロバイダにはパラメータのないコンストラクタがあります。だから私はeasely従属注入プロバイダを使用することはできません、私は、プロファイルプロバイダのようなオブジェクトを作成するオブジェクトを作成する必要がありますhttpcontext、アイデアのユーザーですか? – tartafe

+0

アクションフィルタではそれほど複雑ではありません。 ProfileProviderでDIを使用できない理由はないので、どのDependency Injectionサービスを使用していますか。 – smartcaveman

関連する問題