I am creating an application with the following architecture:
UI - Application - Domain - Infrastructure
I have an Application Layer that needs custom exceptions. Where do I keep these special exceptions? At the infrastructure level? The problem is that my application layer does not have a link to the infrastructure layer.
What is the right way?
Update:
Here is my code that throws an exception in the Application Layer:
public void InsertNewImage(ImagemDTO imagemDTO) { if (isValidContentType(imagemDTO.ImageStreamContentType)) { string nameOfFile = String.Format("{0}{1}", Guid.NewGuid().ToString(), ContentTypeHelper.GetExtension(imagemDTO.ImageStreamContentType)); string path = String.Format("{0}{1}", ImageSettings.PathToSave, nameOfFile); _fileService.SaveFile(imagemDTO.ImageStream, path); Imagem imagem = new Imagem() { Titulo = imagemDTO.Titulo, Descricao = imagemDTO.Descricao, NomeArquivo = nameOfFile }; _imagemRepository.Add(imagem); _dbContext.SaveChanges(); } else { throw new WrongFileTypeException(String.Format("{0} is not allowed.", ContentTypeHelper.GetExtension(imagemDTO.ImageStreamContentType))); } }
Even ImageSettings is a ConfigurationSection in my application level because it uses it. I see no other way to transfer my ImageSettings (which should remain in the Infrastrucuture Layer) to the infrastructure level, can someone help?
public class ImageSettings : ConfigurationSection { /// <summary> /// Caminha onde será salvo as imagens /// </summary> [ConfigurationProperty("pathToSave", IsRequired = true)] public string PathToSave { get { return (string)this["pathToSave"]; } set { this["pathToSave"] = value; } } /// <summary> /// Extensões permitidas pra upload /// </summary> [ConfigurationProperty("allowedExtensions", IsRequired = true)] public string AllowedExtensions { get { return (string)this["allowedExtensions"]; } set { this["allowedExtensions"] = value; } } /// <summary> /// Tamanho das imagens /// </summary> [ConfigurationProperty("imageSize")] public ImageSizeCollection ImageSize { get { return (ImageSizeCollection)this["imageSize"]; } } }
source share