我正在尝试注册一个工厂方法来创建一个开放的泛型类型 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 定义默认实例”。 MongoCollection 有一个带有 MongoServerSettings 的构造函数,但我不希望结构映射使用该构造函数,我希望它使用我的工厂方法。

任何想法为什么不使用工厂方法?这是一个错误吗?

最佳答案

我 fork 了存储库来浏览代码并意识到它绝对是一个错误。我修复了这个错误并发送了 a pull request ,希望它很快就会被合并和发布。

关于c#-4.0 - StructureMap 实例工厂方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10045800/

10-17 02:05