2017-07-11 1 views
0

Ich suche eine MVC .net App zu einer Mongo-Datenbank verbinden. Also beginne ich mit der Suche nach der documentation..net: übergeben Zeichenfolge Parameter im Konstruktor eines injizierten Objekts

die Verbindung zu konfigurieren, ich habe einen String im Konstruktor von MongoClient Klasse weitergeben muß:

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

Das Problem ist, dass ich Castle Windsor Paket ist mit Dependency Injection verwenden und ich bin ein Noob.

Das erste, was ich getan habe, ist die Komponente im Windsor Containern registrieren:

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

Und ich gab sie in den Homecontroller:

private IRowan _rowan; 
private IMongoClient _mongoClient; 

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

mein Problem ist, Wie kann ich den String im Konstruktor MongoClient übergeben?

+0

Ich kann nicht sehen, wo Sie Ihre Instanz von 'HomeController' erstellen. – HimBromBeere

+0

https://stackoverflow.com/questions/20243543/castle-windsor-register-class-with-constructor-parameters hilft das? –

+3

Mögliches Duplikat der [Castle Windsor Registerklasse mit Konstruktorparametern] (https://stackoverflow.com/questions/20243543/castle-windsor-register-class-with-constructor-parameters) –

Antwort

1

Verwenden Sie die UsingFactoryMethod wie im Documentation angegeben. Es wird die Func auf jeder WebRequest ausführen und erstellen Sie Ihre MongoClient.

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

Ist 'UsingFactoryMethod' besser als' DependsOn'? – albert

+1

@albert Es hängt davon ab ^^ Wenn der ConnectionString die einzige Abhängigkeit ist, die in Ihren 'MongoClient' injiziert werden muss, können Sie 'UsingFactoryMethod()' verwenden. Wenn der MongoClient andere Abhängigkeiten benötigt, die in Ihrem Container registriert sind, verwenden Sie 'DependsOn()'. Ich persönlich würde 'DependsOn()' vermeiden, wenn ich kann, weil Sie nicht nur den ConnectionString geben müssen, müssen Sie auch den Namen des Parameters angeben. Das ist eine zusätzliche hartcodierte magische Saite, die vermieden werden könnte. – Rabban

1

Versuchen so etwas wie dieses ..

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

Warum sollte ich 'DependsOn' und nicht' UsingFactoryMethod' verwenden? – albert

+1

Dies kann sich je nach Bedarf ändern. Sie können den Parameter der Konfigurationsdatei mit dem gleichen Namen "connectinString" hinzufügen. – levent

Verwandte Themen