我正在使用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
你有什么想法吗?
答案 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