- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个名为 ILastActivityUpdator
的接口(interface),如下所示:
public interface ILastActivityUpdator
{
void UpdateLastActivity(int userId);
}
除此之外,我还有两个实现此接口(interface)的类,分别是 LastActivityUpdator
和装饰器 AnonymousUserLastActivityUpdator
。后者将 ICookieProvider
作为额外参数,并在方法实现中使用它。即,
public LastActivityUpdator(IUnitOfWork unitOfWork)
: base(unitOfWork)
{ }
public void UpdateLastActivity(int userId)
{
// Do some stuff.
}
装饰器:
public AnonymousUserLastActivityUpdator(
IUnitOfWork unitOfWork,
ICookieProvider cookieProvider,
ILastActivityUpdator lastActivityUpdator)
: base(unitOfWork)
{
this.lastActivityUpdator = lastActivityUpdator;
this.cookieProvider = cookieProvider;
}
public void UpdateLastActivity(int userId)
{
lastActivityUpdator.UpdateLastActivity(userId);
cookieProvider.SetCookie();
}
我想在 AnonymousUserService
中注入(inject) AnonymousUserLastActivityUpdator
,在 UserService
中注入(inject) LastActivityUpdator
。
为此,我在 IoCConfig
中的 RegisterDependencies 方法包含以下从 Autofac FAQ Decorator section 中获取的注册信息.
builder.RegisterType() .Keyed(AuthenticatedStatus.Anonymous) .InstancePerRequest(); builder .RegisterType() .Keyed(AuthenticatedStatus.Authenticated) .InstancePerRequest();
builder.RegisterType<LastActivityUpdator>()
.Named<ILastActivityUpdator>("lastActivityUpdator");
builder.RegisterType<AnonymousUserLastActivityUpdator>()
.Named<ILastActivityUpdator>("lastActivityUpdator");
// Then register the decorator. The decorator uses the
// named registrations to get the items to wrap.
builder.RegisterDecorator<ILastActivityUpdator>(
(c, p, inner) => new AnonymousUserLastActivityUpdator(
c.Resolve<IOogstplannerUnitOfWork>(),
c.Resolve<ICookieProvider>(),
inner),
fromKey: "lastActivityUpdator");
不幸的是,当我运行代码时出现错误:
Autofac.Core.DependencyResolutionException Circular component dependency detected:
Services.AnonymousUserService ->
Services.AnonymousUserService ->
Services.AnonymousUserLastActivityUpdator ->
Services.AnonymousUserLastActivityUpdator ->
Services.AnonymousUserLastActivityUpdator.
此外,我不明白为什么会神奇地注入(inject)正确的实现。有谁知道如何解决这个问题?
最佳答案
出现此错误是因为 C# 编译器不知道要采用 RegisterDecorator
方法的哪个重载。
如果你强制它:
builder.RegisterDecorator<ILastActivityUpdator>(
new Func<IComponentContext, ILastActivityUpdator, ILastActivityUpdator>(
(c, inner) => new AnonymousUserLastActivityUpdator(inner)
),
fromKey: "lastActivityUpdator");
你将有一个新的错误:
AnonymousUserLastActivityUpdator
does not contain a constructor that takes 1 arguments
这个错误是由这一行引起的:
new AnonymousUserLastActivityUpdator(inner)
要解决此错误,您必须更改创建 AnonymousUserLastActivityUpdator
实例的方式
例如:
// only the type being decorated should be registered here
builder.RegisterType<LastActivityUpdator>()
.Named<ILastActivityUpdator>("lastActivityUpdator");
builder.RegisterDecorator<ILastActivityUpdator>(
(c, inner) => new AnonymousUserLastActivityUpdator(c.Resolve<IUnitOfWork>(),
c.Resolve<ICookieProvider>(),
inner),
fromKey: "lastActivityUpdator")
.As<ILastActivityUpdator>();
甚至更好:
builder.RegisterType<LastActivityUpdator>()
.Named<ILastActivityUpdator>("lastActivityUpdator");
builder.RegisterType<AnonymousUserLastActivityUpdator>()
.Named<ILastActivityUpdator>("anonymousLastActivityUpdator");
builder.RegisterDecorator<ILastActivityUpdator>(
(c, inner) => c.ResolveNamed<ILastActivyUpdator>("anonymousLastActivityUpdator",
TypedParameter.From(inner)),
fromKey: "lastActivityUpdator")
.As<ILastActivityUpdator>();
关于c# - DependencyResolutionException 检测到循环组件依赖性 : How to use Autofac to inject decorator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30902440/
我在我的项目中添加了一个 Maven 依赖项,我的项目在本地编译,而它不在服务器上编译。它无法解析新添加的依赖项。 这是我的 pom.xml 文件:
我正在安装一个具有 Maven 依赖项的包,并在尝试清理它时收到 DependencyResolutionException。 克隆它后,我导航到该目录并运行以下命令以安装它,没有错误: mvn in
我是 Autofac 的新手,我想更好地理解以下异常(exception)情况。任何有关此问题的帮助/指示将不胜感激! 获取以下Autofac.Core.DependencyResolutionExc
Autofac 的新手,遵循了 Youtube 上的教程(收视率很高)但它抛出异常,不知道为什么。 异常(exception)情况: DependencyResolutionException: An
我有一个名为 ILastActivityUpdator 的接口(interface),如下所示: public interface ILastActivityUpdator { void Up
Asp.net Mvc 5.2、SignalR 2.1、MS Owin (Katana) 3.0 的 Autofac 3.5 配置应该是什么?是否有更简单的方法来注册 Autofac 解析器(现在有两
我正在尝试通过编程方式获取给定 Artifact 的所有 Maven 依赖项,如本解决方案 [1] 中所述。 我正在尝试获取 ch.qos.logback:logback-classic:1.2.3
我是一名优秀的程序员,十分优秀!