В настоящее время я работаю над приложением WPF, использующим NHibernate в качестве своего уровня персистентности.Я пытаюсь использовать MVVM, частично для того, чтобы я мог использовать Blend для разработки своих элементов управления.
Я пытаюсь следовать примеру Айенде Рахиен в Effectus о наличии одной сессии IS на докладчика (кромев моем случае это модель представления вместо презентера).Моя модель представления выглядит примерно так:
public abstract ViewModelBase : INotifyPropertyChanged
{
private readonly ISessionFactory _sessionFactory;
protected ViewModelBase(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
}
private ISession Session
{
get
{
if (_session == null)
{
_session = _sessionFactory.OpenSession();
}
return _session;
}
}
private ISession _session;
// INotifyPropertyChanged implementation here...
}
public class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel(ISessionFactory sessionFactory)
: base(sessionFactory)
{
var rep = new ProductRepository(this.Session);
this.Products = new ObservableCollection<Product>(rep.GetAll());
}
public ObservableCollection<Product> Products
{
get
{
return _products;
}
set
{
if (_products != value)
{
_products = value;
RaisePropertyChanged("Products");
}
}
}
private ObservableCollection<Product> _products;
}
public class DesignMainWindowViewModel : MainWindowViewModel
{
public DesignMainWindowViewModel(ISessionFactory sessionFactory)
: base(sessionFactory)
{
}
public new ObservableCollection<Product> Products
{
get
{
List<Product> products = new List<Product>();
// fill in design-time products...
return products;
}
set
{
}
}
}
Что я хотел бы достичь, так это иметь ViewModelLocator, который работает с Unity для создания экземпляра модели представления времени разработки при работе в Blend (и модели обычного представления).при нормальном запуске программного обеспечения).Однако для создания экземпляра DesignMainWindowViewModel требуется * ISessionFactory во время разработки.
Три вопроса:
- Есть ли простой способ реализовать ISessionFactory в памяти?
- Должен ли я попытаться использовать базу данных SQLite в памяти?
- Я неправильно отношусь ко всему этому?