Я опубликовал здесь некоторый код здесь , чтобы разрешить передачу «ленивых» зависимостей в ваши классы. Это позволяет заменить:
class MyClass(IDependency dependency)
с
class MyClass(ILazy<IDependency> lazyDependency)
Это дает вам возможность отложить фактическое создание зависимости, пока вам не понадобится ее использовать. Звоните lazyDependency.Resolve()
, когда вам это нужно.
Вот реализация ILazy:
public interface ILazy<T>
{
T Resolve();
T Resolve(string namedInstance);
}
public class Lazy<T> : ILazy<T>
{
IUnityContainer container;
public Lazy(IUnityContainer container)
{
this.container = container;
}
public T Resolve()
{
return container.Resolve<T>();
}
public T Resolve(string namedInstance)
{
return container.Resolve<T>(namedInstance);
}
}
вам нужно будет зарегистрировать его в своем контейнере, чтобы иметь возможность его использовать:
container.RegisterType(typeof(ILazy<>),typeof(Lazy<>));