为什么,既然付出了努力.EF6单元测试可以我不再运行我的c# MVC网站

本文关键字:不再 再运行 我的 网站 MVC 单元测试 付出 EF6 努力 为什么 | 更新日期: 2023-09-27 18:09:54

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

我的DbContext的构造函数以前是这样的。

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

现在我添加了努力。为了进行单元测试,我不得不将DbContext构造函数更改为:

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

现在我可以对代码进行单元测试了。我不能再运行网站了,因为StructureMap无法创建。

没有默认实例已注册,不能自动确定类型'System.Data.Common.DbConnection'

我如何告诉StructureMap如何像以前一样初始化我的DBContext,同时允许努力。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")]

为什么,既然付出了努力.EF6单元测试可以我不再运行我的c# MVC网站

我总算弄明白了。当更改DBContext结构的构造函数时,无法向其传递DbConnection。

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

.SelectConstructor .Use

c.For()()(() =>新PortalEntityModel ());