0

Я ищу возможное решение для следующего.Autofac. Свойства базового класса разрешены без специальной инъекции

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

public class BaseClass { 
    IService SomeService { get; set; } 
} 

У меня есть несколько классов, которые наследуются от этого базового класса.

public class DerivedClass : BaseClass, IDerivedClass { 

} 

И я ввожу, используя следующее.

builder.RegisterType<DerivedClass>().As<IDerivedClass>().OnActivated(e => e.Instance.SomeService = e.Context.Resolve<IService>()); 

Я делаю это примерно для 12 других классов, которые расширяют базовый класс. Есть ли способ, чтобы любой класс, расширяющий BaseClass, получал мою регистрацию IService, не настраивая событие активации для каждой регистрации? Он работает так, но просто хотел бы очистить регистрацию.

ответ

1

Просто используйте инъектор конструктора. Создать конструктор с параметрами для вашего класса, как

public DerivedClass(IServiceOne service1, IService2 service2) 
{ 
this._service1 = service1; 
this._service2 = service2; 

} 

и сделать autofac автоматически делает свою работу, как

builder.RegisterType<T>(); 
+0

Я предполагаю, что я должен расширяться. У меня есть круговая ссылка, следовательно, OnActivated. (круговая ссылка имеет смысл). Я предполагаю, что я имел в виду, я хочу, чтобы OnActivated применил ко всем подклассам BaseClass, не называя OnActivated для каждой регистрации. (IService - это Singleton, который также ссылается на все зарегистрированные IDerivedClasses). Он отлично работает с OnActivated, просто хотел его очистить. –

+0

На самом деле я мог ошибаться, но если у вас есть круговая зависимость от singleton - это 99,9% вероятность того, что вы допустили ошибку при разработке этого компонента. И о вашей проблеме, если она по-прежнему актуальна для вас, я взгляну на это через пару дней, очень занят сейчас – Ph0en1x

Смежные вопросы