using System; using System.Collections.Generic; using System.Text; namespace FileRepository { /// /// A factory to enable consumers of this package to easily get a specific type of repository. /// public class Factory { /// /// An enum to restrict users to only select valid repository types. /// public enum RepositoryType { /// /// An enum member for storing files on disk. /// Disk, /// /// An enum member for storing files in a MongoDb NoSQL database. /// MongoDb, /// /// An enum member for storing files on AWS S3. /// S3, /// /// An enum member for storing files on a remote drive using SFTP. /// Sftp, /// /// An enum member for storing files in an SQL database. /// Sql, } /// /// Initialise an implementation of IFileRepository based on a selected enum member. /// /// The type of repository to initialise, based on the enum member. /// Returns an initialised repository. public IFileRepository GetFileRepository(RepositoryType repositoryType) { switch (repositoryType) { //case RepositoryType.Disk: // return new DiskRepo() { }; //case RepositoryType.MongoDb: // break; //case RepositoryType.S3: // break; //case RepositoryType.Sftp: // break; //case RepositoryType.Sql: // break; default: string repositoryName = Enum.GetName(typeof(RepositoryType), value: repositoryType); throw new ArgumentException($"{repositoryName} is not a valid repository type."); } } } }