地狱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的构造函数。无法消除歧义。
我理解这个异常意味着什么,但我不知道我的配置中出现错误。
你能帮帮忙吗?
感谢。
答案 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>