如何使用 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 ...
}
}
我有一个 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 ...
}
}