Вопрос о фабрике классов обобщенных c #

Я хочу управлять созданием группы классов, которые все имеют общий интерфейс и все нуждаются в некоторой логике в построении. Кроме того, я не хочу, чтобы какой-либо другой код, кроме фабрики классов, мог создавать объекты из этих классов.

Мои основные препятствия:

(1) для универсального метода, чтобы иметь возможность создавать экземпляры классы, в которых мне нужно ограничение new (), что означает, что у меня должен быть общедоступный конструктор классов, что означает, что они могут быть созданы публично.

(2) Альтернативой для самих классов может быть статический метод, который возвращает экземпляр класса. Но я не могу вызвать это из своего универсального класса, потому что мне нужно иметь дело с терминами интерфейсов / типов, и у вас не может быть статики через интерфейсы.

Вот что у меня сейчас есть, но оно использует ограничение new (), которое позволяет публично создавать мои классы:

internal static class MyClassFactory
{
    internal static T Create<T>(string args) where T : IMyType, new()
    {
        IMyType newThing = new T();
        newThing.Initialise(string args);
        return (T)newThing;
    }
}

public interface IMyType
{
    void Initialise(string args);
}

public class ThingA: IMyType
{
public void Initialise(string args)
{
        // do something with args
}
}

Любая помощь очень ценится :)

7
задан Matt Cotton 22 July 2011 в 08:23
поделиться