Autofac RegisterInstance与SingleInstance

Eli*_*eth 29 c# autofac asp.net-web-api asp.net-web-api2

IProductRepositoryProxy ProductDataServiceProviderInstance = new ServiceProductDataProvider();
builder.RegisterInstance(ProductDataServiceProviderInstance).As<IProductRepositoryProxy>();
Run Code Online (Sandbox Code Playgroud)

VS

builder.RegisterType<ServiceProductDataProvider>().As<IProductRepositoryProxy>().InstancePerRequest();
Run Code Online (Sandbox Code Playgroud)

我在这里看到了来自前雇员的代码,并想知道这个人是否想要注册.SingleInstance()行为.

builder.RegisterType<ServiceProductDataProvider>().As<IProductRepositoryProxy>().SingleInstance();
Run Code Online (Sandbox Code Playgroud)

使用RegisterInstance的ServiceProductDataProvider的手动新增与Register .SingleInstance()不同吗?

Cyr*_*and 60

使用RegisterInstance的ServiceProductDataProvider的手动新增与Register .SingleInstance()不同吗?

将RegisterInstance让你在注册一个实例AutoFac.

RegisterInstance和RegisterType+ SingleInstance方法之间的区别在于该RegisterInstance方法允许您注册不是由Autofac构建的实例.

但这两种解决方案都会导致在Autofac中注册一个单例.

顺便说一句,两个注册在以下代码示例中是等效的

var instance = GetInstanceFromSomewhere(); 

builder.RegisterInstance<IService>(instance); 
builder.Register(c => instance).As<IService>().SingleInstance(); 
Run Code Online (Sandbox Code Playgroud)

  • @艾丽莎。是的。只要容器处于活动状态,实例将被共享 (2认同)