我目前在我的应用程序中使用mongodb-csharp驱动程序。
我希望我的存储库依赖IMongoCollection<T>
,我想弄清楚如何配置StructureMap让我在请求时调用lambda。对于非开放泛型类型,我设置如下:
For<IMongoDatabase>()
.HybridHttpOrThreadLocalScoped()
.Use(cx =>
{
var mongo = cx.GetInstance<IMongo>();
return mongo.GetDatabase("TestDB");
});
我想将StructureMap配置为使用开放式泛型执行上述操作,但是我不确定如何获取所请求的类型:
For(typeof (IMongoCollection<>))
.HybridHttpOrThreadLocalScoped()
.Use(cx =>
{
var db = cx.GetInstance<IMongoDatabase>();
// How do I figure out what to close the generic with?
return db.GetCollection<T>();
});
这是否可以使用StructureMap?我觉得我在这里错过了什么......
答案 0 :(得分:3)
不幸的是,没有完全可靠的方法来确定所请求的类型 - 我也遇到了一个限制。我不认为它会在StructureMap 3.0之前修复。 但是,您可以通过查看cx.BuildStack.Root.RequestedType(或BuildStack上的其他帧 - 并不总是根目录)来查找它。我对这种方法没有好运,但值得尝试。
对于您的方案,我可能只让我的消费者接受IMongDatabase
并自己致电GetCollection
。通过你的IOC注入“数据”(以IMongCollection
的形式)感觉有点奇怪。