IoC and messy factory methods - C#