【发布时间】:2015-06-14 23:52:26
【问题描述】:
我有两个将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
{ }
然后我想我可以在AnonymousUserService 构造函数中使用IAnonymousUserLastActivityUpdator,一切都会正确地自动装配。
不幸的是,它总是使用第一个实现,即IAnonymousUserLastActivityUpdator,因为它是较早注册的(按字母顺序)。
如何实现AnonymousUserService 注入AnonymousUserLastActivityUpdator 和UserService LastActivityUpdator?
【问题讨论】:
标签: c# asp.net-mvc dependency-injection autofac