【问题标题】:How can I indicate Unity use a specific constructor when resolves an instance解析实例时如何指示Unity使用特定的构造函数
【发布时间】:2016-05-23 16:13:01
【问题描述】:

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

我有一个这样的上下文类

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

这样的存储库类:

public class Repository
{
    public Repository(DbContext dataContext)
    {

    }
}

在 Bootstrapper 类中我有这个:

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

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

当前类型 System.Data.Common.DbConnection 是抽象类 > 无法构造。您是否缺少类型映射?

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

异常详细信息:System.InvalidOperationException:当前类型 System.Data.Common.DbConnection 是抽象类,无法构造。您是否缺少类型映射?

来源错误:

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

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

异常详细信息:System.InvalidOperationException:当前类型 System.Data.Common.DbConnection 是抽象类,无法构造。您是否缺少类型映射?

来源错误:

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

经过研究发现这个错误是因为Unity默认使用了最冗长的构造函数。

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

你有什么想法吗?

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢,我也更改了这一行: container.RegisterType("DbContext",new HierarchicalLifetimeManager());为此: container.RegisterType(new HierarchicalLifetimeManager(), new InjectionConstructor());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多