ПРИМЕЧАНИЕ. Здесь есть 3 вопроса, и я не задавал отдельные вопросы, поскольку все они в некоторой степени связаны с одним и тем же кодом.
У меня есть следующий код, который регистрирует соединениена мой RavenDB в Application_Start один раз за жизненный цикл приложения:
var store = new DocumentStore { Url = "http://localhost:8080" };
store.Initialize();
builder.RegisterInstance(store).SingleInstance();
Теперь это работает нормально, и это то, что должно быть создано только один раз за жизненный цикл приложения.Теперь я хотел добавить DocumentSession в Autofac, поэтому я попытался добавить это в Application_Start:
var session = store.OpenSession();
builder.RegisterInstance(session).SingleInstance();
В моем UserRepository у меня есть следующий конструктор:
public UserRepository(DocumentStore store, DocumentSession session)
Когда япопробуйте запустить это, я получаю следующую ошибку времени выполнения:
Не удается разрешить параметр 'Raven.Client.Document.DocumentSession Session' конструктора 'Void .ctor (Raven.Client.Document.DocumentStore, Raven.Client.Document.DocumentSession) '
Эта ошибка для меня звучит так, как будто Autofac не думает, что у него есть DocumentSession, однако именно так возвращает store.OpenSession ().Кто-нибудь знает, что будет причиной этой ошибки?Не правильно ли я устанавливаю переменную сеанса (она совпадает с переменной хранилища, которая работает нормально)?
Еще одна вещь, которая может или не может быть связана с вышеупомянутой проблемой, - это как добавить экземплярвозражать против Autofac за запрос вместо жизненного цикла приложений?В то время как объект RavenDB DocumentStore должен создаваться только один раз в течение жизненного цикла приложения, DocumentSession должен создаваться один раз для каждого запроса (возможно, его создание на уровне приложения вызывает вышеуказанную ошибку).
Последний вопрос, который я задам об Autofac (слегка связанный с приведенным выше кодом), касается освобождения объектов.Если вы посмотрите этот урок:
http://codeofrob.com/archive/2010/09/29/ravendb-image-gallery-project-iii-the-application-lifecycle.aspx
Последний фрагмент кода:
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
, и смысл этого кода состоит в том, чтобы предотвратить утечкусессий.Теперь это то, о чем я тоже должен беспокоиться для Autofac, и если да, то как бы я сделал это в Autofac?