2009-10-07 66 views
1

如何使用structureMap测试注册类型的范围?使用structureMap测试类型的范围

比如我有一个注册表:

public class DataRegistry : Registry 
{ 
    public DataRegistry() 
    { 
     ForRequestedType<ISessionManager>().TheDefaultIsConcreteType<SessionManager>().CacheBy(StructureMap.Attributes.InstanceScope.Singleton); 
     ForRequestedType<ISessionRequest>().TheDefaultIsConcreteType<SessionRequest>().CacheBy(StructureMap.Attributes.InstanceScope.HttpContext); 
    } 
} 

我想测试ISessionRequest实例范围的HttpContext。所以我有一个测试:

[Test] 
    public void Container_AlwaysHas_OneSessionRequestPerHTTPContext() 
    { 
     //Setup 

     //Act 
     ObjectFactory.Configure(r => r.AddRegistry<DataRegistry>()); 

     //Test 
    } 

但我不知道测试类型的范围一旦它被注册?

回答

2

我相信您希望编写一个测试,证明已注册插件的生命周期具有所需的生命周期。

您可以检查容器的型号。这是您希望编写的测试之一。

[TestFixture] 
public class container_registration 
{ 
    [Test] 
    public void session_request_should_be_scopped_per_httpcontext() 
    { 
     var container = new Container(new DataRegistry()); 

     var plugin = container.Model.PluginTypes.First(p => p.PluginType.UnderlyingSystemType == typeof(ISessionRequest)); 

     plugin.Lifecycle.ShouldBeOfType(typeof(HttpContextLifecycle)); 
    } 
} 
+0

看起来像它。非常感谢 – JimmyP 2009-10-10 00:16:20

+0

对不起,LifeCycle似乎不再是PluginTypeConfiguration的成员...也许它已被弃用或重命名,有什么想法?似乎无法查看结构图api文档,要么他们都是乱码... – JimmyP 2009-10-10 02:28:27

+0

对不起,我忘了提及我使用StructureMap的树干可能是这是一个新的属性? – KevM 2009-10-11 02:59:26

0
[TestFixture] 
public class WhenRegisteringItemsInTheIoc 
{ 
    [SetUp] 
    public void Setup() 
    { 
     Given_A_Ioc_Container(); 
     When_Registering_Items_In_The_Ioc(); 
    } 
    private Container _container; 

    private void Given_A_Ioc_Container() 
    { 
     _container = new Container(); 
    } 

    public void When_Registering_Items_In_The_Ioc() 
    { 
     _container.Configure(registry => registry.For<IContext>().HybridHttpOrThreadLocalScoped().Use<Context>()); 
    } 

    [Test] 
    public void Then_Should_Have_A_LifeTime_Of_Hybrid_Http_Or_Thread_Local_Scoped() 
    { 
     IPluginTypeConfiguration plugin = 
      _container.Model.PluginTypes.First(p => p.PluginType.UnderlyingSystemType == typeof (IContext)); 
     Assert.That(plugin.Lifecycle, Is.EqualTo("Hybrid")); 
    } 
} 

在任何情况下,这种重访的未来,上面是我们使用覆盖这种情况下的测试。 “plugin.Lifecycle”返回一个与范围有关的字符串,在这种情况下是“Hybrid”。如果没有定义范围,则返回“瞬态”。