public class WriterService
{
private DbWriter _dbWriter;
private IFileWriter _fileWriter;
// I believe I need to change the constructor in order to achieve my goal
public WriterService(DbWriter dbWriter, IFileWriter fileWriter)
{
_dbWriter = dbWriter;
_fileWriter = fileWriter;
}
public void WriterSomething(string text, Stream image)
{
_dbWriter.Write(text);
_fileWriter.Write(image);
}
}
现在在我的基础设施层中我实现了DbWriter and FileWriter, DbWriter看起来像这样:
public DbWriter
{
public void Write(string text) {/* write text to DB */}
}
FileWriter可以有不同的实现:
public interface IFileWriter
{
void Write(Stream image);
}
照片可以写入本地磁盘或AWS S3存储桶:
public DiskDriveWriter : IFileWriter
{
public void Write(Stream image) {/* write image to Disk */}
}
public AWSCloudWriter : IFileWriter
{
public void Write(Stream image) {/* write image to AWS */}
}
internal class AWSWriter : IFileWriter
{
public void Write(string text)
{
//Write to AWS
}
}
internal class DiskDriveWriter : IFileWriter
{
public void Write(string text)
{
//Write to disk
}
}
适配器的抽象基类
public abstract class AbstractFileWriterAdapter
{
internal IFileWriter FileWriter { get; set; }
}
两个适配器,一个用于 AWS,另一个用于 DiskWriter
public class AWSFileWriterAdapter: AbstractFileWriterAdapter
{
public AWSFileWriterAdapter()
{
FileWriter = new AWSWriter();
}
}
public class DiskDriveWriterAdapter:AbstractFileWriterAdapter
{
public DiskDriveWriterAdapter()
{
FileWriter = new DiskDriveWriter();
}
}
作家服务
public class WriterService
{
AbstractFileWriterAdapter _writer;
public WriterService(AbstractFileWriterAdapter writer)
{
_writer = writer;
}
public void WriteMessage(string text)
{
_writer.FileWriter.Write(text);
}
}
最后来自不同项目的调用
var awsAdapter = new AWSFileWriterAdapter();
var service1 = new WriterService(awsAdapter);
service1.WriteMessage("Some fancy text to AWS!!");
var diskDriveAdapter = new DiskDriveWriterAdapter();
var service2 = new WriterService(diskDriveAdapter);
service2.WriteMessage("Some text to the drive!!");