通过调用lambda来关闭打开的泛型类型,包括所请求的内容

时间:2011-03-22 22:42:02

标签: c# structuremap

我目前在我的应用程序中使用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?我觉得我在这里错过了什么......

1 个答案:

答案 0 :(得分:3)

不幸的是,没有完全可靠的方法来确定所请求的类型 - 我也遇到了一个限制。我不认为它会在StructureMap 3.0之前修复。 但是,您可以通过查看cx.BuildStack.Root.RequestedType(或BuildStack上的其他帧 - 并不总是根目录)来查找它。我对这种方法没有好运,但值得尝试。

对于您的方案,我可能只让我的消费者接受IMongDatabase并自己致电GetCollection。通过你的IOC注入“数据”(以IMongCollection的形式)感觉有点奇怪。