问题:如何在现有的Autofac生存期范围内使用Autofac Factory委托创建 new 实例?
根据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调用此Factory委托时,我都需要有一个新实例。
将我的注册从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 Core 1.0 Web应用程序,并且Lifetime范围在API端点调用的开始期间启动,并且一直持续到该API调用完成为止。
答案 0 :(得分:0)
如果要为每个调用创建新实例,请从注册中删除InstancePerDependency
/ InstancePerDependency
方法调用。
有关实例范围的更多详细信息,请参考链接https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html?highlight=InstancePerDependency。