Estoy usando .net 5 para una aplicación Blazor en un proyecto con anulabilidad habilitada. Utiliza Code Behind para crear Blazor Components. Quiero usar un constructor para poder evitar marcar todas las propiedades que no son DI como anulables para simplificar el acceso a ellas en mi código blazor. Sin embargo, si creo un constructor como public PageNumberOne(ILogger<PrimaryItem> logger) {}
Recibo el error MissingMethodException: No se definió un constructor sin parámetros para el tipo
Si uso el atributo de inyección en los elementos DI, tengo la advertencia: la propiedad no anulable _logger debe contener un valor no nulo al excitar el constructor
Entonces, ¿cómo mezclo DI con anulable sin solo marcar cada propiedad como anulable?
También podría crearlos en el cuerpo principal del bloque de "código", pero luego no puedo acceder a mis elementos DI para la inicialización porque no están disponibles hasta que se inicia OnInitialized. Así que de nuevo tengo que marcarlos como Anulables.
Trabajo en el mismo escenario: Blazor Components + Nullable. ¡Lo que hago es declarar los parámetros como anulables y uso ! (que perdona nulos) cuando uso los parámetros:
[Inject] public NavigationManager? MyNavigationManager {get; set;} [Parameter] public MenuItem? MyMenuItem {get; set;} protected void Foo() { var currenturi = MyNavigationManager!.Uri; //<--- here var sometext = MyMenuItem!.text; //<--- here // ...Alternativamente, suponga que la inyección funcionará y declare la propiedad como:
[Inject] public NavigationManager MyNavigationManager {get; set;} = default!;Lo he probado y funciona bien con interfaces o clases sin constructor sin parámetros.