.NET7依赖注入 实例化工厂模式

实例化工厂(Instance Factory)模式是一种自定义的生命周期模式,它允许用户通过工厂方法创建实例,而不是通过构造函数。这种模式常用于创建需要复杂初始化过程的对象,或者需要动态选择实现的对象。通过实现自己的工厂方法,用户可以更加灵活地管理对象的创建和生命周期。示例代码如下:

// IService 接口定义
public interface IService
{
    void DoSomething();
}

// ServiceA 实现 IService 接口
public class ServiceA : IService
{
    public void DoSomething()
    {
        Console.WriteLine("ServiceA.DoSomething called");
    }
}

// ServiceB 实现 IService 接口
public class ServiceB : IService
{
    public void DoSomething()
    {
        Console.WriteLine("ServiceB.DoSomething called");
    }
}

// IServiceFactory 接口定义
public interface IServiceFactory
{
    IService CreateMyService();
}

// ServiceFactory 实现 IServiceFactory 接口
public class ServiceFactory : IServiceFactory
{
    private readonly IServiceProvider _serviceProvider;

    public ServiceFactory(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public IService CreateMyService()
    {
    	// 写一些复杂的创建过程,可以根据业务,功能。
        // 通过 IServiceProvider 获取 ServiceA 实例,可以创建不同的服务还可以是ServiceB
        return _serviceProvider.GetRequiredService<ServiceA>();
    }
}

services.AddSingleton<ServiceA>();
services.AddSingleton<ServiceB>();

services.AddSingleton<IServiceFactory, ServiceFactory>();

services.AddSingleton<IService>(serviceProvider =>
{
    var factory = serviceProvider.GetRequiredService<IServiceFactory>();
    return factory.CreateMyService();
});