Autofac 委托工厂 - 如何每次创建新实例?



问题:如何使用 Autofac 工厂委托在现有 Autofac 生存期内创建新实例?

根据Autofac文档,

如果将对象注册为 InstancePerDependency(( 并调用 多次委托工厂,每次都会得到一个新实例。

将工厂注入现有生存期内类的构造函数时,情况并非如此

一些额外的背景:我正在尝试使用 Autofac 委托工厂,以便每次都创建 ValueObject 类的新实例

此 ValueObject 类的构造函数和委托工厂如下所示:

public SlaInMinutes(int slaInMinutes, ISlaCalculator slaCalculator, ITicketUnitOfWork ticketUnitOfWork)
public delegate SlaInMinutes Factory(int slaInMinutes);

Autofac 注册如下所示:

builder.RegisterType<SlaInMinutes>().InstancePerLifetimeScope();

当我将工厂委托注入现有 LifetimeScope 中的类构造函数 (SlaInMinutes.Factory slaFactory( 时,我能够使用 Factory 参数实例化一个新类,Autofac 负责剩余的构造函数依赖项。太好了。

除了每次我实例化一次后都是相同的实例。每次根据工厂参数 int slaInMinutes 调用此工厂委托时,我都需要一个新实例

将我的注册从 InstancePerLifetimeScope 切换到 InstancePerDependency:

builder.RegisterType<SlaInMinutes>().InstancePerDependency()

不具有每次调用 Factory 方法时创建新实例的效果。

我需要什么:

slaFactory.Invoke(1) //new instance
slaFactory.Invoke(2) //new instance
slaFactory.Invoke(1) //same instance or new instance, don't care

这是一个 ASP.NET 核心 1.0 Web 应用,生存期范围在 API 终结点调用开始时启动,一直持续到该 API 调用完成。

如果要为每个调用创建新实例,请从注册中删除InstancePerDependency/InstancePerDependency方法调用。

您可以参考链接 https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html?highlight=InstancePerDependency,了解有关实例范围的更多详细信息。

最新更新