【问题标题】:Unity: Constructor injection with mutiple constructorsUnity:具有多个构造函数的构造函数注入
【发布时间】:2011-07-10 21:51:01
【问题描述】:

我正在尝试使用 Unity 构造函数注入来注入 EF ObjectContext。 我的尝试是像这样在引导程序中注册类型:

protected override void ConfigureContainer()
{
    base.ConfigureContainer();
    Container.RegisterType<ObjectContext, MyObjectContext>(new InjectionConstructor());
}

EF 创建多个如下所示的构造函数

public MyObjectContext() : base("name=MyObjectContext", "MyObjectContext")
public MyObjectContext(string connectionString) : base(connectionString, "MyObjectContext")
public MyObjectContext(EntityConnection connection) : base(connection, "MyObjectContext")

在调试我的代码时,Unity 会抛出一个 ResolutionFailedException,告诉我“MyObjectContext 类型有多个长度为 1 的构造函数。无法消除歧义。”在解析具有以下构造函数的新类时。

public MainViewModel(UnityContainer container, MyObjectContext entities)

据我所知,使用RegisterTypenew InjectionConstructor() 作为参数可确保调用默认的无参数构造函数(这就是我想要的)。为什么 Unity 不能按预期解析类型?我错过了什么吗?

最好的问候

【问题讨论】:

    标签: c# .net entity-framework unity-container constructor-injection


    【解决方案1】:

    您的注册看起来正确。你确定注册码被调用了吗?尝试在其上设置断点。

    (题外话:为什么要将容器传递给视图模型?)

    【讨论】:

    • 我将此标记为答案,因为它引导我找到了解决方案。似乎 Unity 在解析类型时遇到了一些问题,因为我在错误的地方注册了它。我通过了容器,因为我认为我需要它来解决跨项目(外壳、模块、基础设施等)注册的实例/类型,但这似乎不是正确/有效的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2020-10-24
    相关资源
    最近更新 更多