Я создаю API для своего любимого программного обеспечения и нахожусь в следующей ситуации:
Сервис, который использует другой сервис. У меня есть служба, которая использует другую службу для загрузки сборки. Должен ли я выдать исключение в службу, которая загружает сборку, или в службу, которая использует эту службу?
AssemblyService:
public class AssemblyService : IAssemblyService
{
public Assembly Load(string assemblyName)
{
Assembly assembly;
try
{
assembly = Assembly.Load(assemblyName);
}
catch
{
assembly = null;
}
return assembly;
}
...
}
Сервис, который использует AssemblyService:
public class CommandService : ICommandService
{
private readonly IAssemblyService assemblyService;
public CommandService(IAssemblyService assemblyService)
{
this.assemblyService = assemblyService;
}
public CommandOutput Process(string inputCommand, string requestInfo)
{
string commandName = GetAssemblyName(inputCommand);
string args = GetArgs(inputCommand);
Assembly assembly = assemblyService.Load(commandName);
if (assembly == null) throw new UnknownCommandException(commandName);
ICommand command = assemblyService.GetCommand(assembly);
return command.Execute(args, requestInfo);
}
#region Private methods
...
#endregion
}
Должен ли я генерировать исключение в AssemblyService или CommandService, как в примере выше?
Я пытаюсь научиться обрабатывать исключение, в приведенном выше примере строка assembly = Assembly.Load(assemblyName);
может выдать ArgumentNullException
, ArgumentException
, FileNotFoundException
, FileLoadException
и BadImageFormatException
. Должен ли я обрабатывать все эти исключения?
UnknownCommandException(commandName) is a custom exception.
Другой вопрос: Кто-нибудь, кто использует мой API, может знать, когда метод может вызвать исключение? Я вижу, как навести указатель мыши на любые методы .Net Framework, и вы увидите, может ли метод вызвать исключение. Может ли это работать с методами моего API?