2012-04-06 16 views
3

オープンジェネリックタイプMongoCollection<>のインスタンスを作成するためのファクトリメソッドを登録しようとしています。しかし、私がGetInstanceになると、ファクトリメソッドの代わりにMongoCollectionのコンストラクタが使用されているようです。私はそれがファクトリメソッド内のブレークポイントにヒットすることはありませんが、それは「PluginFamily MongoDb.Driverのために定義されていません既定のインスタンスを言っていないStructureMapExceptionをスローGetInstanceラインを実行するとStructureMapインスタンスファクトリメソッド

var mongo = new MongoConfiguration("mongodb://localhost", "test"); 
For(typeof (MongoCollection<>)).Use(c => 
{ 
    var requestedType = c.BuildStack.Current.RequestedType; // set breakpoint here 
    var type = requestedType.GetGenericArguments()[0]; 
    return mongo.GetCollection(type); 
}); 

は、その後、私は

ObjectFactory.GetInstance<MongoCollection<User>>(); 

を行います。 MongoServerSettings "を参照してください。 MongoCollectionのコンストラクタにはMongoServerSettingsが必要ですが、構造体マップでそのコンストラクタを使用したくない場合は、ファクトリメソッドを使用します。

なぜファクトリメソッドを使用しないのですか?これはバグですか?

+0

For(typeof(MongoCollection ))を試しましたか?(...);を使用してください。 ? – Rookian

+0

@Rookianはそれもそうであるように見えます。あなたがオープンジェネリックのためだけではないことを推測してください... – kelloti

+0

ええと私はそれが他の一般的な要素を指定するとき、単純な文字列のリストでそれを試しました。 – Rookian

答えて

5

私はリポジトリをフォークしてコードをブラウズし、間違いなくバグを認識しました。私はバグを修正し、a pull requestを送ってくれました。うまくいけばすぐに合併され、リリースされるでしょう。

+0

は、ソースに入り、問題を自分で解決するには+1に値する。 –