2009-08-11 9 views
1

私はASP.NETでしばらくの間Webサイトを構築しています。最初は、ASP.NETプロバイダーモデルの複雑さを覚えていませんでした。代わりに、私は必要に応じて缶詰のプロバイダを使用し、他のすべてのニーズに対してDependency Injectionフレームワークに大きく依存しました。カスタムプロバイダー、ベストプラクティス、および構成の競合

しかし、最近私は、ASP.NET用のプラグイン可能なコンポーネントを作成してきました。もちろん、カスタムプロバイダベースのソリューションをたくさん作成しています。しかし、それは私にはすぐに明らかになった、その多くはinitialization code is being duplicated、それは悪いことです。

そう...

  1. 設定スパゲッティコードを回避する方法に浮上している任意のベストプラクティスはありますか?
  2. 基本的な初期化コードを抽象化して共有するためのカスタム・プロバイダの作成が簡単にできるように、サンプル(基本/ヘルパー・クラス、カスタム属性、リフレクション)を用意しましたか?

注:

試してみて、私はProvider Toolkitサイトに送らないでください。私はすでにそのリソースを使い果たしているので、私はSOコミュニティに向いています:)

+1

私はいくつかの助けをしたいと思いますが、私は何かを本当に明確にしていません。あなたはASP.NETのための "プラグイン可能なコンポーネント"を書いています、そして、もちろん "カスタムのプロバイダベースのソリューションをたくさん書いています...私はあなたがプラグイン可能なコンポーネントによって何を意味しているのか、各コンポーネントごとにそれが何をしようとしているのか、各コンポーネントごとに異なるプロバイダが必要な理由を明確にすることができますか?私はいくつかの助けを提供できるかどうかを見ます。 – jrista

+0

ELMAHを見ましたか?私は、ドメイン/アプリケーション固有のものではなく、その関心事にクロスカッティングされたコンポーネントを作成しようと努力してきました。モジュール、ハンドラなど...何らかの種類のストレージに触れる場合、真にプラグイン可能なプロバイダモデル(machine.config/web.config)を利用する必要があります。これは問題ではありませんが、私はあなたが設定のものを管理するために多くのコードを書くことになります。私はちょうど誰かがこの種の配管コードを一般的に扱うためのいくつかのベストプラクティス、あるいはいくつかの実用的な方法を思いつくためにこれを十分に行ったかどうか疑問に思っていました。 – Josh

+0

これは、Web環境でキャッシュするための二重ロックパターンに似ています。キャッシュを使って何かをすると、そのコードを書くことになりますが、通常はそれをいくつかのユーティリティクラスに組み込み、重労働を起こすので、2回書く必要はありません。 configセクションを管理しているうちに終わることがたくさんあります。この問題のために特別なパターンが出てきたかどうかは不思議でした。私はちょうどできるだけドライになりたい。 – Josh

答えて

0

メンバーシップとロールプロバイダのかなり基本的な実装を行ったばかりで、コードの重複はありませんすべて! - asp.net MVCアプリ

  • アプリケーション:

    私は3つのプロジェクト(プラステスト)にすべてを分けています。モデル、コントローラなど

  • インフラストラクチャ - のIoCとインターフェイス
  • Infrastructure.Web - ユーザーおよびロールのためのプロバイダ

モデルは、インフラストラクチャからのインターフェイスを実装し、それらのクラスは、アプリケーションの起動時にのIoCに登録されます。その後、プロバイダはクラスを解決するようにIoCに依頼し、それを行います。このようにして、同じプロバイダを使用しながら、モデルとユーザーインターフェイスに物を追加することができます。私が気づいた1つの問題は、セットアップがApplication_Startで実行され、 "ASP.NET Configuration"が別のWebであるため、 "ASP.NET Configuration"ボタンで起動されたWebがプロバイダを使用できないことです。私は問題としてこれを見ない。

+0

私は、ASP.Netプロジェクトにドロップできるプラガブルコンポーネントを構築しようとしています。私はIoCを使用するのが大好きですが、それはプロジェクトと作業にドロップすることができる単一のDLLの能力を排除します。 – Josh

+0

コンポーネントにミニIoCを組み込み、コンポーネントにインターフェイスを実装するファクトリを登録し、それぞれのクラスを構築するメソッドを公開します。 – svinto

関連する問題