Ошибка Unity при загрузке конфигурации: тип ObjectContext имеет несколько конструкторов длины 1. Невозможно устранить неоднозначность - PullRequest
0 голосов
/ 17 февраля 2012

Черт,

У меня проблема с регистрацией хранилища в контейнере единицы.У меня есть следующая конфигурация и классы:

/ * Общий репозиторий: * /

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 созданcontext: * /

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 = "(нет)".Исключение произошло во время: при разрешении.Исключением является: InvalidOperationException - Тип ObjectContext имеет несколько конструкторов длины 1. Невозможно устранить неоднозначность.

Я понимаю, что означает это исключение, но я не знаю, где у меня ошибка в моей конфигурации.

Можете ли вы помочь, пожалуйста?

спасибо.

1 Ответ

2 голосов
/ 17 февраля 2012

Судя по исключению, 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>
...