Произошла ошибка во время активации определенной регистрации при использовании Autofac - PullRequest
1 голос
/ 02 июля 2019

Так мы регистрируем классы, используя Autofac

builder.Register(c => new FileLogger(ILogger)).As<ILogger>().SingleInstance();

var sizeinkb= Convert.ToInt32(configuration.GetValue<string>("Settings:SizeInKb"));

builder.RegisterType<Broker>().As<IBroker>().WithParameter("size", sizeinkb).SingleInstance();
builder.RegisterType<MainClass>().As<IMainClass>().SingleInstance();

var container = builder.Build();
ContainerFactory.SetContainer(container);

Вот наш класс

public class MainClass:IMainClass
{
    public MainClass(IBroker broker,ILogger logger)
    {
        _broker = broker,
        _logger = logger
    }
}

Вот класс брокера

public class Broker:IBroker 
{
     public Broker(ILogger logger,
             int size)
     {

     }
}

Autofac.Core.DependencyResolutionException HResult = 0x80131500 Сообщение = Произошла ошибка во время активации определенной регистрации. Смотрите внутреннее исключение для деталей. Регистрация: Activator = MainClass (ReflectionActivator), Services = [MyProject.IMainClass], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> Ни один из конструкторов не найден с помощью 'Autofac.Core.Activators .Reflection.DefaultConstructorFinder 'для типа' MyProject.MainClass 'может быть вызван с доступными службами и параметрами: Не удается разрешить параметр «MyProject.IBroker broker» конструктора «Void .ctor (MyProject.IBroker, MyProject.ILogger)».

1 Ответ

0 голосов
/ 02 июля 2019

Вот еще один подход, в котором зависимости могут быть разрешены во время настройки лямбды

//...removed for brevity

var sizeinkb = Convert.ToInt32(configuration.GetValue<string>("Settings:SizeInKb"));
builder.Register(c => new Broker(c.Resolve<ILogger>(), sizeinkb))
    .As<IBroker>().SingleInstance();
builder.RegisterType<MainClass>().As<IMainClass>().SingleInstance();

var container = builder.Build();
ContainerFactory.SetContainer(container);
...