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:
throw new ArgumentException($"{Enum.GetName(typeof(RepositoryType), value: repositoryType)} is not a valid repository type.");
}
}
}
}