代码之家  ›  专栏  ›  技术社区  ›  Paul

Unity to StructureMap帮助

  •  0
  • Paul  · 技术社区  · 16 年前

    我试图在DI映射中将此代码从Unity转换为StructureMap,但似乎无法使其正常工作。我使用的存储库模式类似于Kazi Manzur Rashid在Shrinker中找到的存储库模式。 http://shrinkr.codeplex.com/ 任何帮助都将不胜感激!

    统一代码:

    ....
    
    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());
                    }
                }
            }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Joshua Flanagan    16 年前

    我不知道Unity,但我猜你是想请求IRepository返回一个ProductRepository。

    在structuremap中,代码要简单一点:

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