使用Autofac的ContainerBuilder注册组件时,可以指定作用域和子作用域的共享实例。
以下是一个使用Autofac的代码示例,演示了如何在作用域和子作用域中共享实例:
using Autofac;
public class MyService
{
public int Counter { get; set; }
}
public class Program
{
public static void Main()
{
var builder = new ContainerBuilder();
// 注册MyService为InstancePerLifetimeScope作用域
builder.RegisterType()
.InstancePerLifetimeScope();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var service1 = scope.Resolve();
service1.Counter = 10;
using (var childScope = scope.BeginLifetimeScope())
{
var service2 = childScope.Resolve();
Console.WriteLine(service2.Counter); // 输出 10,子作用域共享父作用域的实例
}
}
}
}
在上面的示例中,我们注册了一个MyService
类为InstancePerLifetimeScope
作用域。这意味着在同一个作用域中解析MyService
时,会得到相同的实例。
在Main
方法中,我们创建了一个ContainerBuilder
对象,并注册了MyService
为InstancePerLifetimeScope
作用域。然后,我们通过调用Build
方法构建了一个容器。
在使用container.BeginLifetimeScope()
创建一个作用域时,我们解析了一个MyService
实例,并将其计数器设置为10。
接下来,我们使用scope.BeginLifetimeScope()
创建一个子作用域,并在子作用域中解析了另一个MyService
实例。由于子作用域共享父作用域的实例,所以子作用域中的MyService
实例的计数器也是10。
最后,我们打印了子作用域中的实例的计数器,输出为10。
这样,我们就实现了在作用域和子作用域中共享实例的功能。