private static IContainer Container { get; set; }
public static void Main()
Console.WriteLine("Hello World");
var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(CreatorA<>)).As(typeof(ICreator<>));
builder.RegisterGeneric(typeof(CreatorB<>)).As(typeof(ICreator<>));
Container = builder.Build();
using (var scope = Container.BeginLifetimeScope())
var filledAModel = scope.Resolve<ICreator<AModel>>().GetModel();
var filledBModel = scope.Resolve<ICreator<BModel>>().GetModel();
public class AModel : BaseModel
public class BModel : BaseModel
public interface ICreator<T> where T:BaseModel{
public class CreatorA<T> : ICreator<T> where T : AModel
return (T) new AModel(){x = "made by CreatorA", A=true};
public class CreatorB<T> : ICreator<T> where T : BModel
return (T) new BModel(){x = "made by CreatorB", B=true};