C #, WPF, .NET Framework 4.5, EntityFramework, Prism
Все мои модели были автоматически сгенерированы путем добавления «ADO.NET Entity Data Model» и выбора «Code First from Database».Никаких изменений в моделях, все обрабатывается во ViewModels.Затем я создал классы IModel, которые содержат:
ICollection<Model> GetEntities();
void CreateEntity(Model entity);
Затем я создал классы обслуживания, такие как ModelService, которые конкретизируют перечисленные выше методы и реализуют IDisposable.Затем ViewModels использует все вышеперечисленное так:
public IModel modelContext;
public ICollection<Model> Models; { get; private set;}
public ViewModel(IModel modelContext)
{
Models = new ObservableCollection<Model>();
this.modelContext = modelContext;
}
Все вышеперечисленное прекрасно работает ... за исключением App.xaml.cs ... и вот что я собираюсь сделать.Я реализовал Глобальную обработку исключений, добавив в файл App.xaml следующее (не cs):
<Application DispatcherUnhandledException="Application_DispatcherUnhandledException">
Затем, вот все App.xaml.cs.У меня есть таблица и модель SQL с именем ErrorLog, где я хочу перехватить и сохранить все ошибки:
public partial class App : Application
{
private readonly string user = Environment.UserName;
private IErrorLog errorLogContext;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
var errorLog = new ErrorLog
{
Message = e.Exception.Message,
DateTime = DateTime.Now,
User = user,
Location = "Global Exception Handler"
};
errorLogContext.CreateEntity(errorLog);
MessageBox.Show("An unhandled exception just occurred: " + e.Exception.Message, "App Title", MessageBoxButton.OK, MessageBoxImage.Warning);
e.Handled = true;
}
}
Проблема в том, что контекст должен быть инициализирован, как это происходит во ViewModels, как errorLogContext скулил в предупреждениях.что это всегда будет нулевым.Я пытаюсь добавить его в конструктор любого из вышеперечисленных методов или создать общедоступное приложение (IErrorLog errorLogContext), и я получаю, что нет предупреждений метода переопределения ... Итак ... где я должен поместить настройки, которые мне не хватает, такчто я могу сохранить исключения в моей базе данных?