У меня есть проблема, чтобы зарегистрировать хранилище с контейнером единства. У меня есть следующие конфигурации и классы:
/* Generic репозиториев: */
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>
Когда я пытаюсь загрузить конфигурацию я получаю сообщение об ошибке:
Постановление зависимости не удалось, тип = «BL.DataAccess. Repository.SourceRepository ", name =" (none) ". Исключение произошло во время: при разрешении. Исключение: InvalidOperationException. Тип ObjectContext имеет несколько конструкторов длиной 1. Невозможно устранить неоднозначность.
Я понимаю, что это означает исключение, но я не знаю, где у меня ошибка в моей конфигурации.
Вы можете помочь с этим!
спасибо.
EntityContext в разделе Указание типа параметра в конфигурации конструктора может сделать трюк. – GrantVS
если вы имеете в виду это: <имя = типа пар "контекст" = "EntityContext"> <имя зависимость = "EntityContext" /> Конструктор> так это не помогло. Та же ошибка. –
zosim
Looks SourceRepository имеет только один составляющий. Можете ли вы попробовать тип t = typeof (SourceRepository); ConstructorInfo [] constructorInfos = t.GetConstructors(); чтобы проверить, сколько у него подрядчиков. – findcaiyzh