私は Ninject を学ぼうとしていて、非常に単純なことだと思ったことから始めました。それを機能させることはできません。明らかに、私は基本的なものを欠いています。
そこで、特定のポートで WCF 呼び出しをリッスンし、WCF 経由で受信したデータをデータベースに保存する、この小さなコンソール アプリケーションを用意しました。ソリューションには 3 つのプロジェクトがあります。1. データ アクセス ライブラリ、2. WCF のもの、3. ホストとして機能するコンソールです。Ninject はまだ使用されていません。したがって、プロジェクト間の依存関係は次のようになります: 3 -> 2 -> 1
コンソール ホストが構成からデータ アクセス ライブラリに取得する接続文字列を挿入することから始めたいと思います。接続文字列の ninjection をグーグル検索すると、いくつかの例が得られましたが、完全ではありません。
次のようにホストの Main() にバインドするよう提案された例の 1 つ:
static void Main(string[] args)
{
new StandardKernel().Bind<ConnectionStringProvider>().ToConstant(
new ConnectionStringProvider { ConnectionString = Config.ConnectionString });
}
ここで、ConnectionStrinProvider は、ConnectionString プロパティを 1 つだけ含む単純なクラスです。私が理解できないのは、データ アクセス ライブラリで ConnectionStrinProvider をインスタンス化する方法です。私は試した
var csprovider = new StandardKernel().Get<ConnectionStringProvider>();
機能しません。つまり、バインディング中に作成されたものではなく、プロバイダーの新しいインスタンスを返します。また、バインディングに .InSingletonScope() を追加しようとしましたが、同じ結果になりました。