Autofac Delegate Factory - 如何每次创建一个新实例?

let*_*lly 5 autofac

问题:如何在现有 Autofac 生命周期范围内使用 Autofac Factory 委托创建新实例?

\n\n

根据 Autofac 文档,

\n\n
\n

如果您将一个对象注册为 InstancePerDependency() 并多次调用\n 委托工厂,\xe2\x80\x99 每次都会获得一个新实例。

\n
\n\n

当将工厂注入到现有生命周期范围内的类的构造函数中时,情况并非如此

\n\n

一些额外的背景:我正在尝试使用Autofac Delegate Factories以便每次创建 ValueObject 类的新实例。

\n\n

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

\n\n
public SlaInMinutes(int slaInMinutes, ISlaCalculator slaCalculator, ITicketUnitOfWork ticketUnitOfWork)\npublic delegate SlaInMinutes Factory(int slaInMinutes);\n
Run Code Online (Sandbox Code Playgroud)\n\n

Autofac 注册如下所示:

\n\n
builder.RegisterType<SlaInMinutes>().InstancePerLifetimeScope();\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我将 Factory 委托注入SlaInMinutes.Factory slaFactory现有 LifetimeScope 内的类构造函数 ( ) 时,我可以使用 Factory 参数实例化一个新类,并且 Autofac 会处理剩余的构造函数依赖项。这很棒。

\n\n

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

\n\n

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

\n\n
 builder.RegisterType<SlaInMinutes>().InstancePerDependency()\n
Run Code Online (Sandbox Code Playgroud)\n\n

每次调用工厂方法时,不会产生创建新实例的效果。

\n\n

我需要的:

\n\n
slaFactory.Invoke(1) //new instance\nslaFactory.Invoke(2) //new instance\nslaFactory.Invoke(1) //same instance or new instance, don\'t care\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个 ASP.NET Core 1.0 Web 应用程序,生命周期范围在 API 端点调用开始时启动,并持续到 API 调用完成。

\n

Sha*_*ham 0

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

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