ServiceLocator не инициализирован в проекте Tests - PullRequest
1 голос
/ 25 июня 2011

При попытке написать тест, связанный с моими новыми задачами (MVC3, S # arp 2.0), я получаю эту ошибку при попытке запустить тест:

MyProject.Tests.MyProject.Tasks.CategoryTasksTests.CanConfirmDeleteReadiness: SetUp: System.NullReferenceException : ServiceLocator не был инициализируется; Я пытался получить SharpArch.NHibernate.ISessionFactoryKeyProvider ----> System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта.

в SharpArch.Domain.SafeServiceLocator 1.GetService() at SharpArch.NHibernate.SessionFactoryKeyHelper.GetKeyFrom(Object anObject) at SharpArch.NHibernate.NHibernateRepositoryWithTypedId 2.get_Session () в SharpArch.NHibernate.NHibernateRepositoryWithTypedId 2.Save(T entity) at MyProject.Tests.MyProject.Tasks.CategoryTasksTests.Setup() in C:\code\MyProject\Solutions\MyProject.Tests\MyProject.Tasks\CategoryTasksTests.cs:line 36 --NullReferenceException at Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current() at SharpArch.Domain.SafeServiceLocator 1.GetService ()

Другие тесты, которые не включают новый класс (например, генерировать / подтверждать сопоставления базы данных), выполняются правильно.

Мой ServiceLocatorInitializer выглядит следующим образом

public class ServiceLocatorInitializer
{

public static void Init() 
{
    IWindsorContainer container = new WindsorContainer();

        container.Register(
                Component
                    .For(typeof(DefaultSessionFactoryKeyProvider))
                    .ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
                    .Named("sessionFactoryKeyProvider"));

    container.Register(
            Component
                .For(typeof(IEntityDuplicateChecker))
                .ImplementedBy(typeof(EntityDuplicateChecker))
                .Named("entityDuplicateChecker"));

    ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
}
}

Ответы [ 2 ]

5 голосов
/ 25 июня 2011

Вы регистрируете DefaultSessionFactoryKeyProvider как реализацию DefaultSessionFactoryKeyProvider, в то время как у вас есть зависимость от ISessionFactoryKeyProvider, который замок Виндзор не знает, как разрешить, поскольку для этого интерфейса не было зарегистрировано ни одной реализации.

Я думаю, чтодолжно быть:

container.Register (Component .For (typeof (ISessionFactoryKeyProvider)) .ImplementedBy (typeof (DefaultSessionFactoryKeyProvider))) .Named ("sessionFactoryKeyProvider"));

2 голосов
/ 27 июня 2011

На ваш тестовый проект ссылается Castle.Core?

...