es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Patrón de Registro de Dependencias en ReactiveUI/Splat

Estoy mirando la Inyección de Dependencias de ReactiveUI y hay algo que me preocupa.

Normalmente, registraría las clases de esta manera.

Locator.Register<IToaster, Toaster>();

Con Splat, pide que se registren de esta manera.

Locator.CurrentMutable.Register(() => new Toaster(), typeof(IToaster));

El problema es que, en una aplicación real, Toaster contendrá 5 dependencias, cada una de las cuales puede tener de 2 a 4 dependencias cada una, algunas de las cuales también tienen dependencias, y hay todo un árbol que inicializar. Esa es toda la idea de la Inyección de Dependencias, administrar eso.

¿Debo hacer ese trabajo manualmente o me falta algo? ¿Cuáles son mis opciones?

EDICIÓN: Encontré parte de la respuesta. Esto es lo que necesito: Splat.DI.SourceGenerator

PERO no encuentro cómo llamar a SplatRegistrations.Register. ¡No parece ser una biblioteca popular en absoluto! ¿Es la mejor opción utilizar el IoC predeterminado de ReactiveUI o no?

EDICIÓN2: Parece más fácil integrar otro contenedor de Inyección de Dependencias que usar SplatRegistrations…

Usando Microsoft.Extensions.DependencyInjection:

var services = new ServiceCollection();
services.AddTransient<MainWindowViewModel>();
services.AddTransient<CurrentTimeDialogViewModel>();
services.AddSingleton<IDialogService>(_ => new DialogService());
services.UseMicrosoftDependencyResolver();

pero esto me está dando excepciones de hilo en todas partes.

¿Cómo puedo tener problemas con algo tan simple?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en c#, .net, la inyección de dependencias y reactiveui, sugeriría lo siguiente:

    En primer lugar, al tratar el registro de múltiples dependencias, sería mejor utilizar una clase contenedor o un marco de trabajo como Autofac, que manejará múltiples dependencias con facilidad. Esto asegurará que el código sea mantenible y escalable en el futuro.

    En segundo lugar, se puede llamar a SplatRegistrations.Register en el archivo App.xaml.cs, donde se encuentra la lógica de inicio de la aplicación. El método se utiliza para registrar todas las dependencias necesarias para la aplicación.

    En caso de que el uso de SplatRegistrations no se ajuste a sus necesidades, siempre se puede intentar integrar otro contenedor de inyección de dependencias como Microsoft.Extensions.DependencyInjection, pero es esencial seguir los pasos de implementación correctos sin cometer errores. Las excepciones de hilos que está obteniendo pueden estar relacionadas con el acceso a objetos desde diferentes hilos, que es un problema común al tratar con E/S de múltiples fuentes.

    En resumen, utilizar SplatRegistrations, frameworks de inyección de dependencias u otros contenedores de DI es el enfoque correcto, y cada uno viene con diferentes detalles de implementación. Es importante elegir la opción que mejor se adapte a los requisitos de su aplicación y luego seguir los pasos de implementación correctos para evitar errores y asegurarse de que su aplicación se ejecute sin problemas.

Comments are closed.