Справка по Unity to Structuremap - PullRequest
       27

Справка по Unity to Structuremap

0 голосов
/ 23 августа 2010

Я пытаюсь преобразовать этот код в моем DI-отображении из Unity в Structuremap, но не могу заставить его работать. Я использую шаблон репозитория, подобный тому, который был найден в шринкере Кази Манзур Рашидом, найденным здесь 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 Ответ

0 голосов
/ 26 августа 2010

Я не знаю Unity, но, полагаю, вы пытаетесь сделать запрос для IRepository вернуть ProductRepository.

В StructureMap код немного проще:

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