【问题标题】:StructureMap - Default constructor bluesStructureMap - 默认构造函数蓝调
【发布时间】:2014-06-04 04:28:53
【问题描述】:

我快疯了,所以我得到了这个

public class FrameworkDbTestBase : IDisposable
{
    protected readonly FrameworkDb Db;
    public FrameworkDbTestBase()
    {
        var connection = Effort.DbConnectionFactory.CreateTransient();
        Db = new FrameworkDb(connection);
    }

    public void Dispose()
    {
        Db.Dispose();
    }
}

这是在努力模拟 ef6 .. 喜欢它,这样我就可以在后台持续执行测试,同时针对我的代码库进行所有更改...这很棒,但不幸的是我需要这样做

public partial class FrameworkDb : DbContext
{
    public FrameworkDb() : base("DefaultConnection"){}
    public FrameworkDb(DbConnection connection): base(connection, true)
    {
        Configuration.LazyLoadingEnabled = false;
    }

    public DbSet<Site> Sites { get; set; }
...

为了努力实现对 ef6 的模拟,但是 structuremap 坚持要为我创建一个带有长构造函数的 FrameworkDb 实例,该实例带有 DbConnection 注入参数,所以我得到了这个:

StructureMap.StructureMapException was unhandled by user code
  HResult=-2146232832
  Message=StructureMap Exception Code:  202
No Default Instance defined for PluginFamily System.Data.Common.DbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
  Source=StructureMap
  ErrorCode=202

叹息!我翻了个白眼......我希望结构映射使用我另一个较短的构造函数,所以在根据这篇文章进行一些挖掘之后:Structure Map - I dont want to use the greediest constructor! 我应该改变这个:

For<FrameworkDb>().Use <FrameworkDb>();

到这里

For<FrameworkDb>().Use(() => new FrameworkDb());

没有这样的运气仍然是同样的错误......我不想删除连接构造函数,否则我的集成测试将不再工作......所以它可能只使用连接构造映射而不实际在注入中使用它本身......没有这样的运气......添加这个:

For<DbConnection>().Use(() => new EntityConnection("DefaultConnection"));

告诉我:

StructureMap.StructureMapException was unhandled by user code
  HResult=-2146232832
  Message=StructureMap Exception Code:  207
Internal exception while creating Instance '00fbcc4f-c5f0-4eb3-b814-9d0ba1bb8e19' of PluginType System.Data.Common.DbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.  Check the inner exception for more details.
  Source=StructureMap
  ErrorCode=207

这个理论就这么多...嗯...解决方案有人吗?你好有人吗?叹息...

【问题讨论】:

    标签: structuremap entity-framework-6


    【解决方案1】:

    来吧,没人吗?答案就是这么简单……好吧

    var framework = new Framework();
    For<FrameworkDb>().Use(() => framework);
    

    如此简单却又如此优雅,你必须知道!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 2015-10-09
      • 2011-02-15
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多