Tenemos algunos servicios en nuestro proyecto que recientemente trasladamos a .NetCore 3.0. Además, dado que StructureMap se eliminará, eliminamos todas las referencias y nos trasladamos a Lamar, ya que fue el más rápido para migrar. Al arrancar, uno de los servicios arroja "System.NullReferenceException: 'Referencia de objeto no establecida en una instancia de un objeto". Por supuesto, reescribí las clases de registro para Lamar. No pude encontrar ningún método de diagnóstico útil en Lamar para encontrar la fuente de un error. Por favor, avíseme si alguien podría guiarme sobre cómo capturar la fuente del error porque ahora la pila de llamadas solo proporciona la llamada de inicio de Bootstrap como la fuente del error. Buscamos todos los ensamblados con una determinada cadena en el nombre del ensamblaje, por ejemplo: "Nombre del proyecto"

var container = new Container(x =>
                    x.Scan(y =>
                    {
                        // Scan all DLLs for Registries
                        y.AssembliesFromApplicationBaseDirectory(
                                assembly =>
                                {
                                     if (assembly.FullName.Contains("Project-Name"))
                                    {
                                        return true;
                                    }
                                    return false;
                                });

                        y.LookForRegistries();

                    }));
0
RamDin 28 oct. 2019 a las 13:08

1 respuesta

La mejor respuesta

No sé si esta es la forma correcta, pero quiero responder mi propia pregunta para marcar esto como cerrado. Tuve que construir mis proyectos uno por uno, registrarlos uno por uno para encontrar el proyecto que estaba causando el problema.

Solo quería agregar más información en caso de que sea útil para alguien. "container.AssertConfigurationIsValid ()" solo es útil si la inicialización del contenedor es exitosa. Para mí, el inicio del contenedor se estaba rompiendo. Así que Assert no fue útil en absoluto.

Pero en caso de que Container se inicialice pero las llamadas de IoC fallan o hay errores como "XYZInterface no está registrado dentro de este contenedor y no puede ser descubierto automáticamente por ninguna política familiar faltante", estos se pueden identificar configurando un reloj en el valor de tiempo de ejecución de su contenedor y verificando si la propiedad ErrorMessages tiene valores. Esto le dará más información sobre lo que realmente está interrumpiendo la inicialización del servicio. En la ventana Inmediato puede verificar el valor de ErrorMessage para cada una de las instancias.

Por ejemplo: para verificar el valor del mensaje de error de la primera instancia en la lista, verifique

((Lamar.InstanceRef[])((Lamar.QueryModel)container.Model).AllInstances)[0].Instance.ErrorMessages. 

Esto ayudará a identificar otros problemas de ruptura.

0
RamDin 30 oct. 2019 a las 20:22