CastleWindsor + NHibernate + NCommon IRepository: как автоматически зарегистрироваться? - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь автоматически зарегистрировать сущности NHibernate, поскольку NCommon IRepository использует Castle, и я не могу понять это.

В предыдущем проекте мы использовали autofac, и вот как мы это сделали:

autofacContainerBuilder.RegisterGeneric(typeof (NHRepository<>))
                .As(typeof (IRepository<>))
                .InstancePerLifetimeScope();

Есть ли эквивалент для Касла? Спасибо!

EDIT:

Это настолько близко, насколько я могу это понять, но ComponentActivator не удается создать экземпляр NHRepository:

.Register(Component.For(typeof(IRepository<>))
                   .ImplementedBy(typeof(NHRepository<>))
                   .LifeStyle.Transient)

ComponentActivator не удалось создать экземпляр NCommon.Data.NHibernate.NHRepository

Вспышка вручную взрывается:

NHRepository<MyEntity> blah = new NHRepository<MyEntity>();

с:

* Ссылка на объект не установлена ​​на экземпляр объекта в Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current () в c: \ Home \ Chris \ Projects \ CommonServiceLocator \ main \ Microsoft.Practices.ServiceLocation \ ServiceLocator.cs: строка 17 *

РЕШИТЬ:

Мне не хватало этого:

ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(Container));

WindsorServiceLocator доступен здесь:

http://commonservicelocator.codeplex.com/wikipage?title=Castle%20Windsor%20Adapter&referringTitle=Home

Подробнее здесь:

http://prashantbrall.wordpress.com/2010/11/22/service-locator-pattern-with-windsor-castle/

1 Ответ

1 голос
/ 17 марта 2012

Мне не хватало этого:

ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(Container));

WindsorServiceLocator доступен здесь:

http://commonservicelocator.codeplex.com/wikipage?title=Castle%20Windsor%20Adapter&referringTitle=Home

Больше информации здесь:

http://prashantbrall.wordpress.com/2010/11/22/service-locator-pattern-with-windsor-castle/

...