私はNinjectを勉強しようとしていて、とても簡単なことだと思って始めました。それを動作させることはできません。明らかに、私は何か基本的なものを欠いている。接続文字列注射
私はこの小さなコンソールアプリケーションを使用して、特定のポートでWCF呼び出しをリッスンし、WCF経由でデータベースに保存するデータを保存します。ソリューションには3つのプロジェクトがあります:1.データアクセスライブラリ、2. WCFのもの、3.ホストとしてのコンソール。 Ninjectはまだ使用されていません。したがって、プロジェクト間の依存関係は次のようになります:3 - > 2 - > 1
コンソールホストが設定からデータアクセスライブラリに取り込む接続文字列を注入することから始めたいと思います。接続ストリングの突き刺しのためのグーグルではいくつかの例がありましたが、完全ではありません。 ConnectionStrinProviderが唯一のプロパティのConnectionStringを含む単純なクラスです
static void Main(string[] args)
{
new StandardKernel().Bind<ConnectionStringProvider>().ToConstant(
new ConnectionStringProvider { ConnectionString = Config.ConnectionString });
}
:
例の一つは、次のように)ホストのメイン(にバインドするために提案しました。私が理解できないことは、データアクセスライブラリでConnectionStrinProviderをインスタンス化する方法です。試しました
これは動作しません - つまり、バインディング中に作成されたものの代わりにプロバイダの新しいインスタンスを返すことを意味します。私はまた、同じ結果で.InSingletonScope()をバインディングに追加しようとしました。
あなたは間違った方法で目標を達成する方法のコード例を提供できますか?私がこれまでに見た例では、Mainにあるものをバインドし、カーネル変数がどこから来るのかを説明せずにkernel.Get()を呼び出して他のモジュールの依存関係を解決しています。それをコンソールアプリケーションのいくつかのクラスの静的メンバーとして公開すると、データアクセスライブラリからコンソールapp(1 - > 3)への依存関係が作成されます。これは私の意見では、まずNinjectを使用する目的を打ち負かします。カップリングを減少させる)。 – user1373607
より完全な例を提供できてうれしく思いますが、データアクセスライブラリとのやりとりの仕方を詳しく説明できますか? DALでインスタンスを作成/呼び出す場所のコードを(質問を編集して)表示できますか?また、 'ConnectionStringProvider'を取得した行の周りにもう少しコンテキスト(周囲のクラスのような)を提供できますか? –