Как использовать Autofac для внедрения конкретной реализации в конструктор
У меня есть два класса, которые принимаютILastActivityUpdator
в качестве параметра конструктора:UserService
а такжеAnonymousUserService
.
public AnonymousUserService(ILastActivityUpdator lastActivityUpdator)
{
if (lastActivityUpdator == null)
{
throw new ArgumentNullException("lastActivityUpdator");
}
this.lastActivityUpdator = lastActivityUpdator;
}
И похоже, как указано выше дляUserService
:
public UserService(ILastActivityUpdator lastActivityUpdator)
{
if (lastActivityUpdator == null)
{
throw new ArgumentNullException("lastActivityUpdator");
}
this.lastActivityUpdator = lastActivityUpdator;
}
ILastActivityUpdator
Интерфейс имеет один метод:UpdateLastActivity(int userId)
, Существует две реализации интерфейса:LastActivityUpdator
и декоратор называетсяAnonymousUserLastActivityUpdator
который наследует отLastActivityUpdator
и добавляет некоторые дополнительные функции в метод, например, так:
public class AnonymousUserLastActivityUpdator
: LastActivityUpdator, IAnonymousUserLastActivityUpdator
{
public AnonymousUserLastActivityUpdator()
{ }
public override void UpdateLastActivity(int userId)
{
base.UpdateLastActivity(userId);
// Extra functionality
}
}
Теперь я хочу использовать Autofac для подключенияAnonymousUserService
сAnonymousUserLastActivityUpdator
иUserService
сLastActivityUpdator
.
Я попытался добавить интерфейс для декоратора, который получен из базового интерфейса следующим образом:
public interface IAnonymousUserLastActivityUpdator : ILastActivityUpdator
{ }
Тогда я думал, что смогу использоватьIAnonymousUserLastActivityUpdator
вAnonymousUserService
конструктор и все будет правильно подключено.
К сожалению, он просто всегда использует первую реализацию, будучиIAnonymousUserLastActivityUpdator
так как он зарегистрирован раньше (в алфавитном порядке).
Как я могу сделать этоAnonymousUserService
получаетAnonymousUserLastActivityUpdator
впрыскивается иUserService
LastActivityUpdator
?