asp.net mvc 3-ServiceLocator未在测试项目中初始化



当我试图编写与我的新任务(MVC3,S#arp 2.0)相关的测试时,我在尝试运行测试时遇到了这个错误:

MyProject.Tests.MyProject.Tasks.CategoryTasksTests.CanConfirmDeleteReadiness:设置: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:codeMyProjectSolutionsMyProject.TestsMyProject.TasksCategoryTasksTests.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));
}
}

您正在将DefaultSessionFactoryKeyProvider注册为DefaultSessionFactoryGeyProvider的实现,而您对ISessionFactoryGeyprovider有依赖关系,castle windsor不知道如何解决此问题,因为尚未为该接口注册任何实现。

我认为应该是:

容器。注册(组成部分.For(类型为(ISessionFactoryKeyProvider)).ElementedBy(类型为(DefaultSessionFactoryKeyProvider)).Named("sessionFactoryKeyProvider");

您的测试项目引用了Castle.Core吗?

最新更新