2009-07-24 4 views
5

Я где-то читал, что NHibernate 2.1 поддерживает инъекцию зависимости конструктора для ее entites.Инъекция зависимостей конструктора с NHibernate 2.1 и StructureMap

Как мне настроить конфигурацию StructureMap и NHibnerate 2.1, чтобы запустить ее?

+0

Получите что-нибудь с этим? Я также хочу ввести зависимости в свои объекты с помощью sm. –

+0

Нет, я думаю, я решил это, переосмыслив проблему и избегая инъекции зависимостей :) – BjartN

ответ

0

Установив StructureMap на все ваши сущности (классы и т. Д.), А затем используя интерфейс для каждого из них в качестве подписи для конструктора класса ... при создании экземпляра класса, у которого есть зависимость в его конструкторе StructureMap будет автоматически вводить его для вас!

[PluginFamily("Default")] 
public interface IWidget1 

[Pluggable("Default")] 
public class Widget1 : IWidget1 

[PluginFamily("Default")] 
public interface IAnotherWidget 

[Pluggable("Default")] 
public class AnotherWidget : IAnotherWidget 
{ 
    public AnotherWidget(IWidget widget) 
    { 
     ... 
    } 
} 

IAnotherWidget _anotherWidget = ObjectFactory.GetInstance<IAnotherWidget>(); 

Нечто подобное!

Это может быть полезным также: Can I replace the call to Activator.CreateInstance() in NHibernate?

И это: http://devlicio.us/blogs/billy_mccafferty/archive/2007/02/05/inject-di-container-into-domain-objects-with-nhibernate.aspx

2

Я понимаю, что это старый вопрос, но в случае, если это может быть полезно.

EDIT: Оригинальные ссылки не были эффективны для NHib 2.1, нашли лучшую информацию.

Для NHibernate 2.1 вы можете создать перехватчик и переопределить метод Instantiate и создать там свой контейнер. Here is an example

Если вы хотите вместо этого использовать инъекцию свойств, вы можете использовать ту же технику, но вместо этого выполните свою работу в методе onLoad.

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