如何在解析实例

时间:2016-05-23 08:04:42

标签: c# asp.net-mvc entity-framework unity-container

我正在使用Code First EntityFramework构建一个asp.Net MVC应用程序。我在Unity容器中使用了依赖注入。

我有一个像这样的上下文类

public partial class MyContext : DbContext
{
    public MyContext()
        : base("name=MyConnString")
    {
        Database.SetInitializer<MyContext>(null);
    }
}

这样的Repository类:

public class Repository
{
    public Repository(DbContext dataContext)
    {

    }
}

在Bootstrapper类中我有这个:

container.RegisterType<DbContext, MyContext>("DbContext",new HierarchicalLifetimeManager());

当我运行应用程序时,它抛出此异常:

  

当前类型System.Data.Common.DbConnection是一个抽象类&gt;并且无法构建。你错过了类型映射吗?

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.InvalidOperationException:当前类型System.Data.Common.DbConnection是一个抽象类,无法构造。你错过了类型映射吗?

来源错误:

  

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。   当前类型System.Data.Common.DbConnection是一个抽象类,无法构造。你错过了类型映射吗?

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.InvalidOperationException:当前类型System.Data.Common.DbConnection是一个抽象类,无法构造。你错过了类型映射吗?

来源错误:

  

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

经过研究,我发现这个错误是因为Unity默认使用最详细的构造函数。

我需要使用第二个构造函数,但我不知道如何配置Unity

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您正在寻找InjectionConstructor

public partial class MyContext : DbContext
{
    [InjectionConstructor]
    public MyContext()
        : base("name=MyConnString")
    {
        Database.SetInitializer<MyContext>(null);
    }
}

您也可以找到这个有用的阅读材料:https://msdn.microsoft.com/en-us/library/ff650802.aspx