加载配置时出现Unity错误:ObjectContext类型有多个长度为1的构造函数。无法消除歧义

时间:2012-02-16 22:25:15

标签: c# configuration repository unity-container

地狱o,

我在使用统一容器注册存储库时遇到问题。我有以下配置和类:

/ *通用存储库:* /

public class Repository<E> : IRepository<E> where E : EntityObject
{
    private readonly ObjectContext _ctx;

    public ObjectContext Context
    {
        get { return _ctx; }
    }

    public Repository(ObjectContext context)
    {
       _ctx = context;            
    }
}   

/ *具体存储库:* /

public class SourceRepository : Repository<Source>
{
    public SourceRepository(EntityContext context) : base(context) { }    
}

/ * EF生成的上下文:* /

public partial class EntityContext : ObjectContext
{
    public EntityContext() : base("name=EntityContext", "EntityContext")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

    public EntityContext(string connectionString) : base(connectionString, "EntityContext")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

    public EntityContext(EntityConnection connection) : base(connection, "EntityContext")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }
}   

/ *使用不带参数的构造函数注册EntityContext类型* /

<register type="ObjectContext" mapTo="EntityContext" name="EntityContext">
    <constructor/>
</register>

/ *注册通用存储库(我不确定是否需要注册)* /

<register type="IRepository[]" mapTo="Repository[]" name="Repository">
    <lifetime type="transient" />
    <constructor>
        <param name="context">
            <dependency name="EntityContext"/>
        </param>
    </constructor>
</register>

/ *注册具体的存储库。我想注入EntityContext类型* /

的构造函数依赖项
<register type="IRepository[Source]" mapTo="SourceRepository" name="SourceRepository">
    <lifetime type="transient" />
    <constructor>
        <param name="context">
            <dependency name="EntityContext"/>
        </param>
    </constructor>
</register>

当我尝试加载配置时,我收到错误:

依赖项的解析失败,type =“BL.DataAccess.Repository.SourceRepository”,name =“(none)”。 在解决时发生异常: 异常是:InvalidOperationException - ObjectContext类型具有多个长度为1的构造函数。无法消除歧义。

我理解这个异常意味着什么,但我不知道我的配置中出现错误。

你能帮帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:2)

根据异常的外观,Resolve正在调用SourceRepository的未命名注册。

确保您的配置设置依赖SourceRepository的所有类以使用正确的命名注册(通过<param><dependency name="SourceRepository" /></param>)。

或者删除源存储库注册中的名称,因此您最终得到:

<register type="IRepository[Source]" mapTo="SourceRepository">
    <lifetime type="transient" />
    <constructor>
        <param name="context">
            <dependency name="EntityContext"/>
        </param>
    </constructor>
</register>