Rompiendo principios sólidos en la implementación múltiple de una interfaz

Estoy enfrentando un problema con la inversión de dependencia en unfactory método y también está rompiendo el principio Abierto Cerrado. Mi código se ve debajo de los códigos

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

Ahora estoy usando una clase de fábrica para resolver la creación de objetos. Se parece al siguiente código

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

Ahora el problema es elFactory la clase esta rompiendoPrincipio abierto cerrado entonces también rompePrincipio de inversión de dependencia

Y entonces

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 la clase de fábrica anterior está rompiendo la inversión de dependencia, elimino elFactory clase y cambiar elSaveDataFlow clase como a continuación

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

Y resolvió esas dependencias usando Unity Framework

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

Sin embargo, eventualmente estoy terminando rompiendoPrincipio Abierto Cerrado. Necesito un mejor diseño / solución para resolver este problema, pero debo seguir los Principios SÓLIDOS.

Respuestas a la pregunta(3)

Su respuesta a la pregunta