2017-07-11 21 views
0

MVC .net appMongoデータベースを接続します。だから私はdocumentationを見て始めます。接続を設定するには.net:注入されたオブジェクトのコンストラクタに渡す文字列パラメータ

、私はMongoClientクラスのコンストラクタに文字列を渡すことがあります。問題は、私は依存性注入を使用する城ウィンザーパッケージを使用しているということです

var client = new MongoClient("mongodb://host:27017,host2:27017/?replicaSet=rs0"); 

私はノブです。

私が行っている最初のものは、ウィンザーコンテナにコンポーネントを登録することです:

container.Register(Component.For<IMongoClient>() 
       .ImplementedBy<MongoClient>() 
       .LifeStyle.PerWebRequest); 

そして私はにHomeControllerでそれを渡された:私の問題は、ある

private IRowan _rowan; 
private IMongoClient _mongoClient; 

public HomeController(IRowan rowan, IMongoClient mongoClient) 
{ 
     _rowan = rowan; 
     _mongoClient = mongoClient;  
} 

MongoClientのコンストラクタでStringをどのように渡すことができますか?

+0

あなたのインスタンスを作成する場所がわかりません。 – HimBromBeere

+0

https://stackoverflow.com/questions/20243543/castle-windsor-register-class-with-constructor-parametersこちらが役立ちますか? –

+3

[Castleorの登録クラスとコンストラクタパラメータの登録クラス]の複製があります(https://stackoverflow.com/questions/20243543/castle-windsor-register-class-with-constructor-parameters) –

答えて

1

Documentationに述べたようにUsingFactoryMethodを使用してください。すべてのWebRequestでFuncを実行し、MongoClientを作成します。

container.Register(Component.For<IMongoClient>() 
      .UsingFactoryMethod(
       () => new MongoClient("mongodb://host:27017,host2:27017/?replicaSet=rs0")) 
      .LifeStyle.PerWebRequest); 
+0

'DependsOn'よりも' UsingFactoryMethod'が優れていますか? – albert

+1

@albertそれは依存します^^あなたの 'MongoClient'に注入する必要がある唯一の依存関係がConnectionStringであれば、' UsingFactoryMethod() 'を使うことができます。しかし、 'MongoClient'があなたのコンテナに登録されている他の依存関係を必要とするなら、' DependsOn() 'を使います。私は個人的に 'DependsOn()'を避けるでしょう。もしあなたがConnectionStringを与えるだけでなく、パラメータの名前も指定する必要があるからです。それは避けることができる追加のハードコーディングされた魔法の文字列です。 – Rabban

1

すると、このような何かを試してみてください。..

container.Register(
    Component.For<IMongoClient>().ImplementedBy<MongoClient>() 
      .DependsOn(Dependency.OnValue("connectionString", "mongodb://host:27017,host2:27017/?replicaSet=rs0")) 
    ); 
+0

なぜ「UsingFactoryMethod」ではなく「DependsOn'」を使用する必要がありますか? – albert

+1

これは必要に応じて変更されることがあります。 "connectinString"と同じ名前の設定ファイルにパラメータを追加できます。 – levent

関連する問題