FileNamePartProviderContainer
using FileNaming.CustomFileNaming;
using System;
using System.Collections.Generic;
namespace kCura.WinEDDS.FileNaming.CustomFileNaming
{
public class FileNamePartProviderContainer : IFileNamePartProviderContainer
{
private readonly Dictionary<Type, IFileNamePartProvider> _fileNamePartProviders;
public FileNamePartProviderContainer()
{
_fileNamePartProviders = new Dictionary<Type, IFileNamePartProvider>();
Register(typeof(SeparatorDescriptorPart), new SeparatorFileNamePartProvider());
Register(typeof(FieldDescriptorPart), new FieldFileNamePartProvider());
Register(typeof(CustomTextDescriptorPart), new CustomTextFileNamePartProvider());
Register(typeof(FirstFieldDescriptorPart), new FirstFieldFileNamePartProvider());
}
public IFileNamePartProvider GetProvider(DescriptorPart descriptor)
{
Type type = descriptor.GetType();
if (!_fileNamePartProviders.ContainsKey(type))
throw new ArgumentOutOfRangeException($"""{descriptor.GetType()}");
return _fileNamePartProviders[type];
}
IFileNamePartProvider IFileNamePartProviderContainer.GetProvider(DescriptorPart descriptor)
{
return this.GetProvider(descriptor);
}
public void Register(Type descriptorPartType, IFileNamePartProvider provider)
{
if (!descriptorPartType.IsSubclassOf(typeof(DescriptorPart)))
throw new ArgumentException($"""{descriptorPartType}");
_fileNamePartProviders[descriptorPartType] = provider;
}
void IFileNamePartProviderContainer.Register(Type descriptorPartType, IFileNamePartProvider provider)
{
this.Register(descriptorPartType, provider);
}
}
}