问题:如何在现有的Autofac生命周期范围内使用Autofac工厂委托来创建一个新实例?
根据Autofac文档,
如果您将对象注册为InstancePerDependency()并多次调用委托工厂,则每次都会获得一个新实例。
但是,在将工厂注入到现有生命周期范围内的类的构造函数中时,情况并非如此。
一些额外的背景信息:我正在尝试使用 Autofac Delegate Factories来每次创建一个ValueObject类的新实例。
这个ValueObject类的构造函数和委托工厂看起来像这样:
当我将Factory委托注入到现有LifetimeScope中的类构造函数(
但是,自从我实例化它之后,每次都是相同的实例。我需要每次调用此工厂委托时,基于Factory参数int slaInMinutes获得一个新实例。
将我的注册从InstancePerLifetimeScope更改为InstancePerDependency:
这是一个ASP.NET Core 1.0的Web应用程序,Lifetime作用域在API端点调用开始时启动,并持续到该API调用完成。
根据Autofac文档,
如果您将对象注册为InstancePerDependency()并多次调用委托工厂,则每次都会获得一个新实例。
但是,在将工厂注入到现有生命周期范围内的类的构造函数中时,情况并非如此。
一些额外的背景信息:我正在尝试使用 Autofac Delegate Factories来每次创建一个ValueObject类的新实例。
这个ValueObject类的构造函数和委托工厂看起来像这样:
public SlaInMinutes(int slaInMinutes, ISlaCalculator slaCalculator, ITicketUnitOfWork ticketUnitOfWork)
public delegate SlaInMinutes Factory(int slaInMinutes);
Autofac注册的样子如下:
builder.RegisterType<SlaInMinutes>().InstancePerLifetimeScope();
当我将Factory委托注入到现有LifetimeScope中的类构造函数(
SlaInMinutes.Factory slaFactory
)中时,我可以使用Factory参数实例化一个新类,并且Autofac会处理其余的构造函数依赖项。这很棒。但是,自从我实例化它之后,每次都是相同的实例。我需要每次调用此工厂委托时,基于Factory参数int slaInMinutes获得一个新实例。
将我的注册从InstancePerLifetimeScope更改为InstancePerDependency:
builder.RegisterType<SlaInMinutes>().InstancePerDependency()
这个工厂方法每次调用时并没有创建一个新的实例。
我所需要的是:
slaFactory.Invoke(1) //new instance
slaFactory.Invoke(2) //new instance
slaFactory.Invoke(1) //same instance or new instance, don't care
这是一个ASP.NET Core 1.0的Web应用程序,Lifetime作用域在API端点调用开始时启动,并持续到该API调用完成。