using Microsoft.Extensions.DependencyInjection; namespace InkForge.Common.ReactiveUI; public interface IViewModelFactory { abstract static ObjectFactory CreateObjectFactory(); abstract static TCreator GetCreator(ObjectFactory factory, IServiceProvider serviceProvider); } public class ViewModelFactory where TFactory : IViewModelFactory where TCreator : Delegate { private static ObjectFactory? s_factory; public TCreator CreateFactory(IServiceProvider serviceProvider) { s_factory ??= TFactory.CreateObjectFactory(); return TFactory.GetCreator(s_factory, serviceProvider); } }