I have two classes that take a ILastActivityUpdator
as a constructor parameter: UserService
and AnonymousUserService
.
public AnonymousUserService(ILastActivityUpdator lastActivityUpdator)
{
if (lastActivityUpdator == null)
{
throw new ArgumentNullException("lastActivityUpdator");
}
this.lastActivityUpdator = lastActivityUpdator;
}
And similar as above for UserService
:
public UserService(ILastActivityUpdator lastActivityUpdator)
{
if (lastActivityUpdator == null)
{
throw new ArgumentNullException("lastActivityUpdator");
}
this.lastActivityUpdator = lastActivityUpdator;
}
ILastActivityUpdator
interface has one method: UpdateLastActivity(int userId)
. There are two implementations of the interface, a LastActivityUpdator
and a decorator called AnonymousUserLastActivityUpdator
which inherits from LastActivityUpdator
and adds some extra functionality to the method, like so:
public class AnonymousUserLastActivityUpdator
: LastActivityUpdator, IAnonymousUserLastActivityUpdator
{
public AnonymousUserLastActivityUpdator()
{ }
public override void UpdateLastActivity(int userId)
{
base.UpdateLastActivity(userId);
// Extra functionality
}
}
I now want use Autofac to wire up the AnonymousUserService
with the AnonymousUserLastActivityUpdator
and the UserService
with the LastActivityUpdator
.
What I tried is to add an interface for the decorator that derives from the base interface like so:
public interface IAnonymousUserLastActivityUpdator : ILastActivityUpdator
{ }
Then I thought I could use the IAnonymousUserLastActivityUpdator
in the AnonymousUserService
constructor and everything would be autowired properly.
Unfortunately it just always uses the first implementation, being IAnonymousUserLastActivityUpdator
since it is registered earlier (alphabetical order).
How can I accomplish that the AnonymousUserService
gets the AnonymousUserLastActivityUpdator
injected and the UserService
the LastActivityUpdator
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…