我们正在重构旧系统以使用DI。可悲的是,一些"核心"在任何地方使用的组件都有注入不友好的构造函数(例如,描述),因此我们必须使用ServiceLocator来创建它们。目前重构它们是非常不切实际的。
我们通过将ILifetimeScope注入适当的位置来尝试创建不友好的类,但是得到以下异常:
No constructors on type 'Autofac.Core.Registration.ScopeRestrictedRegistry' can be found with the constructor finder 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'.
如果我作弊并使用"更新"在ContainerBuilder上的方法,然后将容器注册为LifetimeScope,解决方案成功运行,但是,鉴于Update已经过时,它不是我想做的事情。
有人可以帮忙吗?
编辑:我没有做任何特别的事情。建立是标准的:
builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces();
this.Container = builder.Build();
builder = new ContainerBuilder();
builder.RegisterInstance(this.Container);
builder.RegisterInstance(this.Container).As<ILifetimeScope>();
builder.Update(this.Container);
没有这些行
builder = new ContainerBuilder();
builder.RegisterInstance(this.Container);
builder.RegisterInstance(this.Container).As<ILifetimeScope>();
builder.Update(this.Container);
任何具有ILifetimeScope依赖关系的类都会因上述错误而失败。
public class MyClass : IMyClass
{
public MyClass(ILifetimeScope scope)
{
...
}
}
我实际上认为这是Autofac框架中的一个错误,所以我希望团队中的某个人能够告诉我更多。
ILifetimeScope应该自动可用。