using Microsoft.Extensions.DependencyInjection; using System; namespace ZuneModCore; public interface IModFactory where T : Mod { ModMetadata Metadata { get; } T Create(IServiceProvider services); } /// /// A base class that implements with /// using dependency injection. /// /// public abstract class DIModFactoryBase : IModFactory where T : Mod { public abstract ModMetadata Metadata { get; } public virtual T Create(IServiceProvider services) { return ActivatorUtilities.CreateInstance(services, Metadata); } }