2010-10-18 2 views
0

Я использую NHibernate + Castle.Windsor, чтобы добавить какое-то поведение к моим объектам. Это означает, что NHibernate создает объекты через Windsor. Это означает, что у меня должен быть пустой конструктор по умолчанию, поэтому Windsor сможет создавать экземпляры моих объектов. Мне это не нравится по многим причинам, главное, что мне не нравится иметь объекты в неустойчивом состоянии.Castle.Windsor: Resolving Type с пустым защищенным конструктором

Можно ли каким-либо образом создать экземпляр объекта без открытого конструктора без параметров?

Дополнительная информация: Я попытался использовать пользовательский активатор для своих объектов, но это не работает, поскольку Windsor генерирует исключение, когда обнаруживает, что нет возможности разрешать зависимости, поэтому он ударяет перед использованием моего активатора.

Некоторый код:

public class Product 
{ 
    public string Name { get; set; } 
    public Product(string name) 
    { 
     Name = name; 
    } 
    protected Product() { } 
} 

Давайте предположим, что у меня есть выше сущность: Если я пытаюсь решить эту сущность через Виндзор он бросает исключение, говоря мне, что продукт ждут некоторых зависимостей, которые не были зарегистрированы. Если я использую только NHibernate, все работает правильно. Итак, в основном я пытаюсь подражать поведению NHibernate в этом сценарии при разрешении моих объектов через Windsor.

Спасибо заранее,

Хорхе Варгас.

+0

'string name' не может быть компонентом Windsor. Не уверен, что вы хотите, чтобы Виндзор заполнил его. –

+0

Я не хочу, чтобы Виндзор заполнил все, это моя точка. Я хочу, чтобы он выбирал защищенный конструктор, как работает NHibernate. Или я не знаю, есть ли другой способ добавить некоторые перехватчики после того, как NHibernate создаст прокси. То, что я хочу сделать, - это автоматическое уведомление PropertyChanged, как это делается в ChinookMediaManager, но я не могу этого сделать, если мои объекты не разрешаются через Windsor. Надеюсь, это даст вам лучшее представление о том, что я хочу делать. Спасибо Маурисио. –

ответ

1

Вам не нужно иметь конструкторы без параметров в своих объектах NHibernate или писать пользовательские активаторы Windsor. См. this article.

+0

Я уже видел эту статью, но я не сталкиваюсь с этой проблемой. Я обновил свой вопрос с дополнительной информацией, надеюсь, вы знаете способ делать то, что я прошу. Благодарю. –

Смежные вопросы