问题:如何在现有 Autofac 生命周期范围内使用 Autofac Factory 委托创建新实例?
\n\n根据 Autofac 文档,
\n\n\n\n\n如果您将一个对象注册为 InstancePerDependency() 并多次调用\n 委托工厂,\xe2\x80\x99 每次都会获得一个新实例。
\n
当将工厂注入到现有生命周期范围内的类的构造函数中时,情况并非如此
\n\n一些额外的背景:我正在尝试使用Autofac Delegate Factories以便每次创建 ValueObject 类的新实例。
\n\n这个 ValueObject 类的构造函数和委托工厂如下所示:
\n\npublic SlaInMinutes(int slaInMinutes, ISlaCalculator slaCalculator, ITicketUnitOfWork ticketUnitOfWork)\npublic delegate SlaInMinutes Factory(int slaInMinutes);\nRun Code Online (Sandbox Code Playgroud)\n\nAutofac 注册如下所示:
\n\nbuilder.RegisterType<SlaInMinutes>().InstancePerLifetimeScope();\nRun Code Online (Sandbox Code Playgroud)\n\n当我将 Factory 委托注入SlaInMinutes.Factory slaFactory现有 LifetimeScope 内的类构造函数 ( ) 时,我可以使用 Factory 参数实例化一个新类,并且 Autofac 会处理剩余的构造函数依赖项。这很棒。
除了我实例化一次后每次都是同一个实例。每次我根据 Factory 参数 int slaInMinutes 调用此 Factory 委托时,都需要有一个新实例。
\n\n将我的注册从 InstancePerLifetimeScope 切换到 InstancePerDependency:
\n\n builder.RegisterType<SlaInMinutes>().InstancePerDependency()\nRun Code Online (Sandbox Code Playgroud)\n\n每次调用工厂方法时,不会产生创建新实例的效果。
\n\n我需要的:
\n\nslaFactory.Invoke(1) //new instance\nslaFactory.Invoke(2) //new instance\nslaFactory.Invoke(1) //same instance or new instance, don\'t care\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个 ASP.NET Core 1.0 Web 应用程序,生命周期范围在 API 端点调用开始时启动,并持续到 API 调用完成。
\n如果您想为每个调用创建新实例,请从您的注册中删除InstancePerDependency/方法调用。InstancePerDependency
您可以参考链接https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html?highlight=InstancePerDependency了解有关实例范围的更多详细信息。
| 归档时间: |
|
| 查看次数: |
1539 次 |
| 最近记录: |