Я рекомендую использовать пользовательский Ninject Provider для настройки вашего RavenDB DocumentStore.Сначала поместите это в свой блок кода, который регистрирует ваши Ninject-сервисы.
kernel.Bind<IDocumentStore>().ToProvider<RavenDocumentStoreProvider>().InSingletonScope();
Затем добавьте этот класс, который реализует Ninject Provider.
public class RavenDocumentStoreProvider : Provider<IDocumentStore>
{
var store = new DocumentStore { ConnectionName = "RavenDB" };
store.Conventions.IdentityPartsSeparator = "-"; // Nice for using IDs in routing
store.Initialize();
return store;
}
IDocumentStore должен быть одиночным,но не делайте IDocumentSession одиночным.Я рекомендую вам просто создать новый IDocumentSession с помощью OpenSession () в экземпляре IDocumentStore, который Ninject дает вам всякий раз, когда вам нужно взаимодействовать с RavenDB.Объекты IDocumentSession очень легкие, следуют шаблону единиц работы, не являются поточно-ориентированными и предназначены для использования и быстрого удаления в случае необходимости.
Как и другие, вы можете также рассмотреть возможность реализации базового контроллера MVC, который переопределяет методы OnActionExecuting и OnActionExecuted для открытия сеанса и сохранения изменений, соответственно.