0

我的 C# MVC 网站使用 StructureMap 进行依赖注入。

我的 DbContext 的构造函数曾经如下所示。

public class PortalEntityModel : DbContext
{
    public PortalEntityModel() : base("name=PortalEntityModel")
    {
    }
}

现在我添加了 Effort.EF6 以进行单元测试,我不得不将我的 DbContext 构造函数更改为此。

public class PortalEntityModel : DbContext
{
    public PortalEntityModel(DbConnection connection) : base(connection, true)
    {
    }
}

虽然我现在可以对我的代码进行单元测试。我无法再运行该网站,因为 StructureMap 自更改后无法创建。

没有注册默认实例,并且无法为类型“System.Data.Common.DbConnection”自动确定

如何告诉 StructureMap 如何像以前一样初始化我的 DBContext,同时允许 Effort.EF6 也可以工作?

编辑 -

StructureMap在网站启动时启动如下...

    public static void Start()
    {
        IContainer container = IoC.Initialize();
        StructureMapDependencyScope = new StructureMapDependencyScope(container);
        DependencyResolver.SetResolver(StructureMapDependencyScope);
        DynamicModuleUtility.RegisterModule(typeof(StructureMapScopeModule));
    }

网站启动时自动启动

[assembly: PreApplicationStartMethod(typeof(StructuremapMvc), "Start")]
[assembly: ApplicationShutdownMethod(typeof(StructuremapMvc), "End")]
4

1 回答 1

0

我设法弄清楚了。当更改 DBContext 结构映射的构造函数时,无法将 DbConnection 传递给它。

所以我现在有两个构造函数,并在结构图设置中添加了一些逻辑,告诉它网站应该使用哪个构造函数。

c.For().Use().SelectConstructor(() => new PortalEntityModel());

于 2016-10-01T19:29:16.680 回答