2010-08-23 8 views
0

J'essaye de convertir ce code dans mon mapping DI de Unity vers Structuremap mais je n'arrive pas à le faire fonctionner. J'utilise le modèle Repository comme celui trouvé dans shrinkr par Kazi Manzur Rashid trouvé ici http://shrinkr.codeplex.com/ Toute aide serait appréciée!Unity to Structuremap help

Code de l'unité:

.... 

private static readonly Func<LifetimeManager> perRequest =() => new PerRequestLifetimeManager(); 

.... 

IBuildManager buildManager = container.Resolve<IBuildManager>();   RegisterRepositories(buildManager, container); 

.... 

private static void RegisterRepositories(IBuildManager buildManager, IUnityContainer container) 
     { 
      Type genericRepositoryType = typeof(IRepository<>); 

      IEnumerable<Type> repositoryContractTypes = buildManager.PublicTypes.Where(type => (type != null) && type.IsInterface && type.GetInterfaces().Any(interfaceType => interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition().Equals(genericRepositoryType))).ToList(); 

      foreach (Type repositoryImplementationType in buildManager.ConcreteTypes.Where(implementationType => repositoryContractTypes.Any(contractType => contractType.IsAssignableFrom(implementationType)))) 
      { 
       foreach (Type repositoryInterfaceType in repositoryImplementationType.GetInterfaces()) 
       { 
        container.RegisterType(repositoryInterfaceType, repositoryImplementationType, perRequest()); 
       } 
      } 
     } 

Répondre

0

Je ne sais pas l'unité, mais je devine que vous essayez de faire des demandes de IRepository renvoient un ProductRepository.

En StructureMap, le code est un peu plus simple:

var container = new Container(x => { 
    x.Scan(scan => 
    { 
     scan.TheCallingAssembly(); 
     scan.ConnectImplementationsToTypesClosing(typeof(IRepository<>)); 
    }); 
}); 
+0

Ce que je suis en train de faire est d'enregistrer chaque interface qui hérite IRepository et la mise en œuvre correspondante HttpContextScoped. Toutes mes Interfaces repo héritent de l'IRepository et je ne voulais pas avoir à s'enregistrer comme: Pour (). HttpContextScoped(). (); Pour (). HttpContextScoped(). Utilisez (); Je pense que ma question initiale n'était peut-être pas très claire, désolé à ce sujet. – Paul