Add abstract factory pattern in C#