StructureMap 实例工厂方法

3

我正在尝试为创建一个开放泛型类型 MongoCollection<> 的实例注册一个工厂方法。然而,当我调用 GetInstance 时,它似乎使用的是 MongoCollection 的构造函数而不是工厂方法。

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>>();

当我运行GetInstance这一行时,它从未触发工厂方法内的断点,但是它抛出了一个StructureMapException异常,内容为“PluginFamily MongoDb.Driver.MongoServerSettings没有定义默认实例”。虽然有一个接受MongoServerSettings参数的MongoCollection构造函数,但我不想让StructureMap使用该构造函数,而是要使用我的工厂方法。
有什么想法,为什么它不使用工厂方法?这是一个bug吗?

你试过 For(typeof (MongoCollection<User>)).Use(...); 吗? - Rookian
@Rookian 看起来这也发生了。猜想它不仅限于开放泛型... - kelloti
我尝试使用一个简单的字符串列表,当我指定了泛型元素时它可以工作,否则就不行。 - Rookian
不管怎样,如果我必须指定一个通用参数,那么它就没有用了。 - kelloti
1个回答

5

我复制了这个代码库以浏览代码,发现它肯定是一个错误。我修复了这个错误并发送了拉取请求,希望它能很快合并并发布。


值得一加,因为你自己进入源代码并修复了问题。 - Warren Rumak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接