【问题标题】:StructureMap instance factory methodStructureMap 实例工厂方法
【发布时间】:2012-04-06 15:45:26
【问题描述】:

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

知道为什么它不使用工厂方法吗?这是一个错误吗?

【问题讨论】:

  • 你试过了吗 For(typeof (MongoCollection)).Use(...); ?
  • @Rookian 看起来也发生了这种情况。猜猜它不仅仅适用于开放泛型......
  • 嗯,当我指定通用元素时,我尝试了一个简单的字符串列表,否则它不起作用。
  • 不管怎样,如果我必须指定一个通用参数也没有用

标签: c#-4.0 structuremap factory-method open-generics


【解决方案1】:

我分叉存储库以浏览代码并意识到它绝对是一个错误。我修复了这个错误并发送了a pull request,希望它会尽快合并并发布。

【讨论】:

  • 应该获得 +1 以了解源代码并自己解决问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2011-01-24
  • 2011-05-10
  • 2016-12-24
相关资源
最近更新 更多