Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

117
Visualizações
AddAllTypesOf frente a ConnectImplementationsToTypesClosing

Tengo curiosidad en cuanto a la diferencia entre estos dos métodos. Estoy implementando un patrón de decorador con genéricos abiertos y no importa si uso AddAllTypesOf o ConnectImplementationsToTypesClosing , obtengo la misma funcionalidad.

 public class CommandRegistry : Registry { public CommandRegistry() { For<CommandProcessor>().Use<DefaultCommandProcessor>().Transient(); Scan(scanner => { scanner.AssemblyContainingType<SaveCoolCommandHandler>(); //scanner.AddAllTypesOf(typeof(CommandHandler<>)); //scanner.AddAllTypesOf(typeof(IValidator<>)); //scanner.AddAllTypesOf(typeof(LogMehh<>)); scanner.ConnectImplementationsToTypesClosing(typeof(CommandHandler<>)); scanner.ConnectImplementationsToTypesClosing(typeof(IValidator<>)); scanner.ConnectImplementationsToTypesClosing(typeof(LogMehh<>)); }); var handlerType = For(typeof(CommandHandler<>)); handlerType.DecorateAllWith(typeof(CommandValidator<>)); //Second handlerType.DecorateAllWith(typeof(CommandLogger<>)); //First // ObjectFactory.WhatDoIHave(); } }

La llamada a ObjectFactory.WhatDoIHave() también me da los mismos resultados sin importar el método que elija.

Miré el código fuente y estos métodos definitivamente están haciendo cosas diferentes, solo que no he podido determinar exactamente cuál es la diferencia. ¿Existen pautas o escenarios en los que se prefiera uno sobre el otro?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Advertencia: no he usado StructureMap en un proyecto comercial desde hace varios años. Es posible que las cosas hayan cambiado desde entonces, pero su código de ejemplo parece completamente familiar, así que supongo que no ha cambiado mucho.

La única razón por la que soy consciente de dónde querrá favorecer uno sobre el otro es cuando desea definir explícitamente la (s) convención (es) que se usarán para mapear implementaciones concretas a T . Ambos pueden hacerlo, pero la solidez de la implementación difiere.

Si usa ConnectImplementationsToTypesClosing<T> , durante la configuración de Scan() pasa una clase de convención que hereda de IRegistrationConvention . Para mí, al menos, funcionó sin problemas.

AddAllTypesOf<T> supuestamente tiene una funcionalidad similar a través ITypeScanner pero en la práctica tuvimos todo tipo de problemas extraños, como registros de tipos duplicados, tipos que no se registran si están en un espacio de nombres diferente de T y, a menudo, no encuentran las implementaciones específicas que se suponía que tenían. . Todos estos problemas desaparecieron al usar ConnectImplementationsToTypesClosing<T> .

Si no está tratando de hacer nada demasiado inteligente y las convenciones predeterminadas funcionan para usted, no debería notar ninguna diferencia entre los dos. Si necesita anular las convenciones predeterminadas por cualquier motivo, preferiría ConnectImplementationsToTypesClosing<T> .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda