2009-09-11 6 views

Répondre

0

L'unité devrait construire paresseusement des instances, je crois. Voulez-vous dire qu'il charge les assemblages contenant les autres dépendances? Si c'est le cas, vous pouvez jeter un oeil à MEF - il est conçu spécifiquement pour les applications modulaires.

+1

Ou Prism (Composite Application Guidance): http://compositewpf.codeplex.com –

1

J'ai blogué du code here pour permettre de faire passer les dépendances 'paresseuses' dans vos classes. Il vous permet de remplacer:

class MyClass(IDependency dependency) 

avec

class MyClass(ILazy<IDependency> lazyDependency) 

Cela vous donne la possibilité de retarder la création effective de la dépendance jusqu'à ce que vous devez l'utiliser. Appelez le lazyDependency.Resolve() lorsque vous en avez besoin.

est ici la mise en œuvre de 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); 
    } 
} 

vous devez vous inscrire dans votre conteneur pour pouvoir l'utiliser:

container.RegisterType(typeof(ILazy<>),typeof(Lazy<>)); 
10

Il y a une solution encore mieux - prise en charge native pour Lazy <T> et IEnumerable < Lazy <T> > dans l'Unity 2.0. Vérifiez-le here.

+0

Ne pas oublier cette ligne 'unityContainer.AddNewExtension ();' et la référence 'PM> Install-Package Unity.Extensions .Lazy ' –

Questions connexes