Ленивое разрешение внедрения зависимости - PullRequest
4 голосов
/ 11 сентября 2009

у меня есть .net классы Я использую единство в качестве МОК для решения наших зависимостей. Он пытается загрузить все зависимости в начале. Есть ли способ (настройка) в Unity, который позволяет загружать зависимость во время выполнения?

Ответы [ 3 ]

10 голосов
/ 14 мая 2010

Существует даже лучшее решение - встроенная поддержка Lazy и IEnumerable > в Unity 2.0. Проверьте это здесь .

1 голос
/ 16 сентября 2009

Я опубликовал здесь некоторый код здесь , чтобы разрешить передачу «ленивых» зависимостей в ваши классы. Это позволяет заменить:

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<>));
0 голосов
/ 11 сентября 2009

Единство должно лениво конструировать примеры, я считаю. Вы имеете в виду, что он загружает сборки, содержащие другие зависимости? Если это так, вы можете взглянуть на MEF - он разработан специально для модульных приложений.

...