Нарушение принципов SOLID в множественной реализации интерфейса

Я сталкиваюсь с проблемой с инверсией зависимостей вfactory метод, и это также нарушает принцип Open Closed. Мой код выглядит как коды ниже

    public interface IWriter
    {
        void WriteToStorage(string data);
    }

    public class FileWriter : IWriter
    {
        public void WriteToStorage(string data)
        {
            //write to file
        }
    }

    public class DBWriter : IWriter
    {
        public void WriteToStorage(string data)
        {
            //write to DB
        }
    }

Теперь я использую фабричный класс для решения создания объекта. Это похоже на код ниже

public interface IFactory
{
    IWriter GetType(string outputType);
}

public class Factory : IFactory
{
    public IWriter GetType(string outputType)
    {
        IWriter writer = null;
        if (outputType.Equels("db"))
        {
            writer = new FileWriter();
        }
        else if (outputType.Equels("db"))
        {
            writer = new DBWriter();
        }
    }
}

Теперь проблема заключается вFactory класс ломаетсяОткрытый закрытый принцип так и ломаетсяПринцип обращения зависимостей

А потом

public interface ISaveDataFlow
{
    void SaveData(string data, string outputType);
}

public class SaveDataFlow : ISaveDataFlow
{
    private IFactory _writerFactory = null;
    public SaveDataFlow(IFactory writerFactory)
    {
        _writerFactory = writerFactory;
    }
    public void SaveData(string data, string outputType)
    {
        IWriter writer = _writerFactory.GetType(outputType);
        writer.WriteToStorage(data);
    }
}

Поскольку вышеупомянутый фабричный класс нарушает инверсию зависимости, я удаляюFactory класс и изменитьSaveDataFlow класс как ниже

public class SaveDataFlow : ISaveDataFlow
{
    private IWriter _dbWriter = null;
    private IWriter _fileWriter = null;
    public SaveDataFlow([Dependency("DB")]IWriter dbWriter,
                        [Dependency("FILE")]IWriter fileWriter)
    {
        _dbWriter = dbWriter;
        _fileWriter = fileWriter;
    }
    public void SaveData(string data, string outputType)
    {
        if (outputType.Equals("DB"))
        {
            _dbWriter.WriteToStorage(data);
        }
        else if (outputType.Equals("FILE"))
        {
            _fileWriter.WriteToStorage(data);
        }
    }
}

И разрешил эти зависимости, используя Unity Framework

container.RegisterType<IWriter, DBWriter>("DB");
container.RegisterType<IWriter, FileWriter>("FILE");

Тем не менее, в конце концов я заканчиваю тем, что ломаюсьОткрытый Закрытый Принцип, Мне нужен лучший дизайн / решение для решения такой проблемы, но я должен следовать принципам SOLID.

Ответы на вопрос(3)

Ваш ответ на вопрос