Autofa c тип регистра с конструктором, который должен зарегистрировать зависимости конструктора - PullRequest
1 голос
/ 22 января 2020

У меня есть два проекта, когда первый запускается, он вводит зависимости, когда второй запускает, он также вводит некоторые себе. У меня есть класс с именем "SchedulerImpl" в первом проекте, который выглядит следующим образом:

  public class SchedulerImpl: ISche
{
    private IScheduler _scheduler;
    private string _uniqueId { get; set; }
    private string _userId;

    public SchedulerImpl(IScheduler scheduler)
    {
        _scheduler = scheduler;
    }

, как вы можете видеть, конструктор принимает тип IScheduler.

в проекте # 2 Я пытаюсь внедрить класс «SchedulerImpl» (который принадлежит проекту № 1), и мне также нужно внедрить IScheduler, который внедряет конструктор, какие-либо идеи о том, как это сделать? Я смотрел на документацию, но это слишком чертовски запутанно .. любая помощь будет оценена

Ответы [ 2 ]

1 голос
/ 22 января 2020

Вы должны зарегистрировать IScheduler, например, как синглтон:

builder.RegisterInstance(QuartzInstance.Instance).AsImplementedInterfaces();

, а затем класс, который его использует:

builder.RegisterType<SchedulerImp>().AsImplementedInterfaces();

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

Если у вас есть два проекта, и каждый из них должен зарегистрировать группу классы или синглтоны с контейнером, используйте Module в Autofa c.

0 голосов
/ 22 января 2020

Контейнер должен выглядеть следующим образом

builder.Register (c => new SchedulerImpl (QuartzInstance.Instance)). As ();

где

SchedulerImpl

- это класс с конструктором, который вы хотите внедрить,

QuartzInstance.Instance

- это поле, которое получает внедряется в конструктор, и

ISche

- это интерфейс, который SchedulerImpl реализует

...