C# 使用structureMap测试类型的范围
如何使用structureMap测试已注册类型的范围 例如,我有一个注册表:C# 使用structureMap测试类型的范围,c#,tdd,structuremap,C#,Tdd,Structuremap,如何使用structureMap测试已注册类型的范围 例如,我有一个注册表: public class DataRegistry : Registry { public DataRegistry() { ForRequestedType<ISessionManager>().TheDefaultIsConcreteType<SessionManager>().CacheBy(StructureMap.Attributes.Instanc
public class DataRegistry : Registry
{
public DataRegistry()
{
ForRequestedType<ISessionManager>().TheDefaultIsConcreteType<SessionManager>().CacheBy(StructureMap.Attributes.InstanceScope.Singleton);
ForRequestedType<ISessionRequest>().TheDefaultIsConcreteType<SessionRequest>().CacheBy(StructureMap.Attributes.InstanceScope.HttpContext);
}
}
公共类数据注册表:注册表
{
公共数据注册表()
{
ForRequestedType().TheDefaultIsConcreteType().CacheBy(StructureMap.Attributes.InstanceScope.Singleton);
ForRequestedType().TheDefaultIsConcreteType().CacheBy(StructureMap.Attributes.InstanceScope.HttpContext);
}
}
我想测试ISessionRequest实例范围是否为HttpContext。所以我有一个测试:
[Test]
public void Container_AlwaysHas_OneSessionRequestPerHTTPContext()
{
//Setup
//Act
ObjectFactory.Configure(r => r.AddRegistry<DataRegistry>());
//Test
}
[测试]
公共无效容器\u AlwaysHas\u OneSessionRequestPerHTTPContext()
{
//设置
//表演
Configure(r=>r.AddRegistry());
//试验
}
但是我不知道在类型注册后如何测试它的作用域?我相信您希望编写一个测试来证明注册插件的生命周期具有所需的生命周期 您可以检查容器的模型。下面是您希望编写的测试之一
[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));
}
}
[TestFixture]
在HEIOC注册项目时的公共类
{
[设置]
公共作废设置()
{
给定一个Ioc容器();
在Ioc()中注册项目时;
}
私家货柜;;
给定的私有void_A_Ioc_容器()
{
_容器=新容器();
}
在Ioc()中注册项目时,公共无效
{
_Configure(registry=>registry.For().HybridHttpOrthReadLocalScope().Use());
}
[测试]
public void则\u应该\u拥有\u Hybrid\u Http\u或\u Thread\u Local\u Scoped()的\u life\u
{
IPluginTypeConfiguration插件=
_container.Model.PluginTypes.First(p=>p.PluginType.underyingsystemtype==typeof(IContext));
Assert.That(plugin.Lifecycle,Is.EqualTo(“Hybrid”);
}
}
如果将来有人再次访问此场景,我们将使用上面的测试来覆盖此场景。“plugin.Lifecycle”返回与作用域相关的字符串,在本例中为“Hybrid”。如果未定义范围,则返回“瞬态” 看起来是这样。令人担忧的是,生命周期似乎不再是PluginTypeConfiguration的成员。。。也许它已经被弃用或重命名了,有什么想法吗?似乎无法查看structuremap api文档,或者它们都是乱码…抱歉,我忘了提到我正在使用structuremap的主干,这可能是一个新属性?
[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"));
}
}