2009-10-07 51 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」。如果沒有定義範圍,則返回「瞬態」。