острая архитектурная проблема - PullRequest
2 голосов
/ 25 февраля 2011

Я начал использовать новейшую архитектуру s # arp (1.9.5.0). Иногда я добавляю некоторые данные в базу данных через консольное приложение, используя что-то вроде этого:

Repository<OriginalSequence> SequenceRepository = new Repository<OriginalSequence>();
...
SequenceRepository.SaveOrUpdate(Sequence);
SequenceRepository.DbContext.CommitChanges();

NHibernateSession.Current.Flush();
NHibernateSession.Current.Clear();

К сожалению, я получаю:

ServiceLocator не был инициализирован; Я пытался получить SharpArch.Data.NHibernate.ISessionFactoryKeyProvider

Это связано с DI, я думаю. что обычно необходимо, только когда я использую его в веб-приложении или что-то кардинально изменилось? Спасибо.

Christian

PS:

Обратите внимание, что я начинаю с:

string[] mappingAssemblies = new string[] { "Bla.Data" };
                string configFile = "NHibernate.config";
                NHibernate.Cfg.Configuration config = NHibernateSession.Init(
                        new SimpleSessionStorage(),
                        mappingAssemblies,
                        new AutoPersistenceModelGenerator().Generate(),
                        configFile);

Раньше это работало нормально.

1 Ответ

1 голос
/ 25 февраля 2011

Это было исправлено в выпуске 1.9.6, но вам нужно зарегистрировать реализацию ISessionFactoryKeyProvider по умолчанию в контейнере Windsor.

В ComponentRegistrar.cs в папке CastleWindsor проекта "Web" добавьте этот код в метод AddGenericRepositoriesTo:

container.Register(
  Component
    .For(typeof(ISessionFactoryKeyProvider))
    .ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
    .Named("sessionFactoryKeyProvider"));
...