Quebrando os princípios do SOLID na implementação múltipla de uma interface

Estou enfrentando um problema com inversão de dependência em umfactory método e também está quebrando o princípio Aberto Fechado. Meu código se parece com os códigos abaixo

    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
        }
    }

Agora eu estou usando uma classe de fábrica para resolver a criação de objetos. Parece o código abaixo

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();
        }
    }
}

Agora o problema é oFactory classe está quebrandoPrincípio aberto aberto então também quebraPrincípio de Inversão de Dependência

E depois

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);
    }
}

Como a classe de fábrica acima está quebrando a inversão de dependência, removo oFactory classe e mudar oSaveDataFlow classe como abaixo

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);
        }
    }
}

E resolveu essas dependências usando o Unity Framework

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

No entanto, finalmente estou terminandoPrincípio Aberto Fechado. Preciso de um design / solução melhor para resolver esse problema, mas devo seguir os Princípios do SOLID.

questionAnswers(3)

yourAnswerToTheQuestion