Я пытаюсь сделать простую инъекцию конструкторы с NHibernate Listners событий, вот пример:Dependency Injection с прослушивателями событий NHibernate
public class FormGeneratorUpdate : IPostUpdateEventListener
{
private readonly IHostingEnvironment _env;
public FormGeneratorUpdate(IHostingEnvironment env)
{
_env = env;
}
public void OnPostUpdate(PostUpdateEvent @event)
{
string typeName = @event.Entity.GetType().Name;
dynamic entity = @event.Entity;
string filePath =
$"{_env.ContentRootPath}\\App_Data\\FormGenerator\\{typeName}\\{entity.Id}.json";
File.Delete(filePath);
string json = JsonConvert.SerializeObject(entity);
using (FileStream fs = File.Create(filePath))
{
// Add some text to file
Byte[] content = new UTF8Encoding(true).GetBytes(json);
fs.Write(content, 0, content.Length);
}
}
}
В настоящее время я создал NHibernate bytecodeProvider для реализации autofac как так:
NHibernate.Cfg.Environment.BytecodeProvider =
new AutofacBytecodeProvider(_container, new ProxyFactoryFactory(), new DefaultCollectionTypeFactory());
Это, похоже, отлично работает при создании фабрики сеансов, но у меня есть вопрос, как зарегистрировать прослушиватель событий с конфигурацией NHibernate без предварительной его инициализации? Каждый способ, которым я могу зарегистрировать его требует, чтобы я первый экземпляр объекта следующим образом:
cfg.SetListener(ListenerType.Update, new FormGeneratorUpdate());
Поскольку конструктор не пуст, бросает ошибку ... Я пытался просто регистрации слушателей событий с Autofac и tthat похоже, тоже не работает, я полагаю, что мне нужно установить его в конфигурации, а также как-то.
Я предлагаю вам задать свой ответ в качестве принятого - с маленьким тиканием ниже оценки. Я обновил мой, чтобы указать регистрацию, поскольку интерфейсы - это не путь, но, тем не менее, это было бы более очевидно, если бы ваш ответ пришел первым. –
Кроме того, вы можете исправить это последнее предложение, когда оно читает *, используя '_container.ResolveOptional()', а не '_container.ResolveOptional()' * –
Хорошо, это говорит, что я должен подождать, прежде чем принимать мои, как ответ. Спасибо за публикацию, хотя, как правило, сложно получить обратную связь по NHibernate. –