我疯了所以我得到了这个
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的模拟努力,但是structmap坚持用long构造函数创建一个带有DbConnection注入参数的FrameworkDb实例,所以我得到了这个:
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
感叹!我翻了个白眼......我希望structmap能够使用另一个较短的构造函数,所以根据这篇文章进行了一些挖掘: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
这个理论真是太棒了......啊......解决任何人的问题?大家好吗?叹息......
答案 0 :(得分:1)
没有人来吧?答案很简单......好吧
var framework = new Framework();
For<FrameworkDb>().Use(() => framework);
如此简单而优雅,你必须要知道的事情!