Как вернуть исключение в одном проекте в другой? - PullRequest
1 голос
/ 21 июля 2011

есть ли способ отловить и вернуть исключение из одного проекта в другой?

Например, я храню коды в разных проектах.Скажите A и B. Если A является частью двигателя, а B является частью пользовательского интерфейса, то исключение, которое произошло в двигателе, должно быть зафиксировано и в пользовательском интерфейсе. Пожалуйста, помогите.

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Единственная причина, по которой вы хотите поймать исключение в коде вашего движка, это если вы думали, что справитесь с ним, или вам нужно было сделать какую-нибудь запись или что-то в этом роде.Нет большой (какой-либо) пользы в ловле, просто чтобы бросить.Однако, если у вас есть веская причина, то в вашем коде пользовательского интерфейса вы можете иметь

try
{
    engine.Start();
}
catch (SpecificException se)
{
    // Do stuff with specific exception
}
catch (Exception ex)
{
    // Show the user something unexpected happened 
}

В вашем коде Engine вы можете указать:

public void Start()
{
    try
    {
        if (this.HasNoOil)
        {
            throw new SpecificException("Can't go without oil. We'll do some damage");
        } 
        // Other stuff
    }
    catch (Exception ex)
    {
        // Log details of exception and throw it up the stack
        throw;
    }
}
2 голосов
/ 21 июля 2011

Если вы хотите перехватывать исключения на уровне пользовательского интерфейса, вы не можете перехватывать их на уровне своего движка.

Для работающего приложения нет разницы, в какой сборке (каждый проект создает сборку) было сгенерировано исключение.

Если вам действительно нужно поймать и перебросить исключение на уровне вашего двигателя, перебросьте правильно

catch(Exception ex) 
{ 
    // whatever logic
    throw;
}

или оберните его

catch(Exception ex) 
{ 
    // whatever logic
    throw new YourEngineException("Some Message", ex);
}   

Если вы просто хотите зарегистрировать это, не делайте этого, если это не пересекает границы процесса.

Поймай, войди, перебрось, по моему мнению, это анти-паттерн. Он просто создает записи журнала в несколько миллиардов, достаточно ловить на самом высоком уровне, если вы не уничтожите трассировку стека.

Используйте перенос, если вы можете предоставить дополнительную информацию для исключения. Например, если у вас есть один метод, который загружает данные, изменяет и сохраняет их, вы можете обернуть исключение и добавить «Ошибка« {0} »при сохранении» или что-то еще. Однако не забудьте включить исходящее исключение в качестве внутреннего исключения.

0 голосов
/ 21 июля 2011

На мой взгляд, это невозможно, если только эти два приложения не совместно используют один и тот же домен приложения.Чтобы сделать их частью одного домена приложения, вам нужно сделать что-то вроде remoting или wcF, где вы можете делиться объектами между двумя проектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...