На данный момент у нас есть нереальный шарик кода, который предлагает интерфейс для стороннего приложения. Стороннее приложение имеет COM-сборку, которую ДОЛЖЕН использовать для создания новых записей. Этот процесс состоит из двух этапов: создать новый объект (в основном идентификатор) и обновить этот объект новыми значениями полей.
Поскольку COM-взаимодействие очень медленное, мы используем его только для генерации идентификатора (и связанных объектов) в базе данных. Фактическое обновление выполняется с помощью обычного SQL-запроса.
Что я пытаюсь выяснить, возможно ли использовать NHibernate, чтобы выполнить некоторые тяжелые работы для нас, не обходя сборку COM. Вот код для сохранения чего-либо в базе данных, как я это представляю:
using(var s = sessionFactory.OpenSession())
using(var t = s.BeginTransaction())
{
MyEntity entity = new MyEntity();
s.Save(entity);
t.Commit();
}
Обычный код NH, я бы сказал. Теперь это где это становится сложным. Я думаю Я должен предоставить свою собственную реализацию NHibernate.Id.IIdentifierGenerator , которая вызывает COM-сборку в методе Generate. Это не проблема. Проблема в том, что COM-сборка требует инициализации, что занимает немного времени. По некоторым причинам ему также не нравятся несколько экземпляров в одном и том же процессе.
Что я хотел бы знать, так это то, есть ли способ получить доступ к внешней службе в коде генератора.
Я могу свободно использовать любую технику, какую захочу, поэтому, если она включает в себя что-то вроде контейнера IoC, это не проблема. То, что я ищу, это где именно подключить мой код, чтобы я мог получить доступ к вещам, которые мне нужны в моем генераторе, без необходимости прибегать к использованию синглетонов или других неприятных вещей.