如何使用 Unity 依赖注入实现 Lazy

how can I Implement Lazy with Unity Dependency Injection

我有一个 class,我要在其中注入两个服务依赖项。我正在使用 Unity 容器。

public UserService(ILazyInitialization<AClass> aCLass, ILazyInitialization<BClass> bClass) 
{ _aClass= aCLass; 
  _bClass= bClass; 
}

UnityCONfig就像

 container.RegisterType<IAClass, AClass>(); 
 container.RegisterType<IBCLass, BClass>();

我已经为实现 Lazy

创建了一个通用 class
 public class LazyInitialization<T> : ILazyInitialization<T> where T : class 
    {
        private static Lazy<T> _lazy;
         

        public static class LazyDefault
        {
            static Type listType = typeof(T);
            public static Lazy<T> Create<T>() where T : new()
            {
                return new Lazy<T>(() => Activator.CreateInstance<T>());
                return  new Lazy<T>(() => new T());
            } 
        }

此通用 class 始终重新调整 null Lazy 的值。

我正在从我的服务 class 中调用此方法,例如:-

LazyInitialization<AClass>.LazyDefault.Create<AClass>();

如何使用 Unity 容器实现它?

我不确定你的任务到底是什么,但是,如果你需要在解析阶段而不是稍后实例化对象,比如说手动,你可以使用 Lazy<T> 而不是 ILazyInitialization<T>

// ... registration part ...
container.RegisterInstance<Lazy<IService>>(new Lazy<IService>(() => new Service()));

// another service
public class ServiceA : IServiceA
{
    private readonly Lazy<IService> _lazy;

    public ServiceA(Lazy<IService> lazyInstance)
    {
        _lazy = lazyInstance;
    }

    public void DoSmth()
    {
        // create instance
        var instance = _lazy.Value;
        // use instance below ...
    }
}