'Autofac.Core.Activators.Reflection.DefaultConstructorFinder Ошибка Autofac - PullRequest
0 голосов
/ 20 января 2019

При попытке вставить один из моих компонентов я получаю следующую ошибку:

Нет конструкторов для типа 'Event.Function.Components.EventComponent' с помощью поиска конструкторов 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'

Как видите, я пытаюсь добавить следующие компоненты:

DependencyInjection.Initialize(builder =>
        {
            builder.RegisterType<DatabaseContext>().As<IDatabaseContext>()
                .WithParameter("connectionString", ConfigurationManager.AppSettings["connectionString"].ToString());

            builder.RegisterType<Repository>().As<IRepository>().SingleInstance().PropertiesAutowired();
            builder.RegisterType<EventComponent>().As<IEventComponent>().SingleInstance().PropertiesAutowired();
            builder.RegisterType<CommentComponent>().As<ICommentComponent>().SingleInstance().PropertiesAutowired();

        }, functionName);

Ниже, пожалуйста, найдите class объекты, которые я пытаюсь внедрить.

public class DatabaseContext : DbContext, IDatabaseContext
{
    public DatabaseContext(string connectionString) : base(connectionString)
    {

    }
}

public class Repository : IRepository
{

    protected readonly IDatabaseContext Context;

    public Repository(IDatabaseContext context)
    {
        Context = context;
    }
}
public class EventComponent : IEventComponent
{
    private readonly IRepository _repository;

    private EventComponent(IRepository repo)
    {
        _repository = repo;
    }
}

Я использую .PropertiesAutoWired(), который дает следующее определение, и, насколько я понимаю, должен знать, что такое IRepository, поскольку он зарегистрирован в контейнере.

Настройте компонент таким образом, чтобы любые свойства, типы которых зарегистрированы в контейнере, были связаны с экземплярами соответствующей службы.

Я что-то не так делаю?

1 Ответ

0 голосов
/ 20 января 2019

Размещение здесь, так как, надеюсь, поможет кому-то еще, и, возможно, моему будущему я.

После публикации я понял, что конструктор моего EventComponent является приватным, и он должен быть публичным.

Итак, я изменил:

public class EventComponent : IEventComponent

    private readonly IRepository _repository;

    private EventComponent(IRepository repo)
    {
        _repository = repo;
    }
}

Кому:

public class EventComponent : IEventComponent

    private readonly IRepository _repository;

    public EventComponent(IRepository repo)
    {
        _repository = repo;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...