我们正在做的结构图:
internal static class ContainerBootstrapper
{
public static void BootstrapStructureMap()
{
ObjectFactory.Initialize(x =>
{
x.For<SafeFlowContext>().HttpContextScoped().Use<SafeFlowContext>();
x.For<DbContext>().HttpContextScoped().Use<SafeFlowContext>();
x.For<IInterface>().HttpContextScoped().Use<Class>();
...
每个应用程序只能执行一次,按照:
public sealed class ServiceLoc
{
public static ServiceLoc GetInstance()
{
return new ServiceLoc();
}
private IInterfacesHere
private ServiceLocator()
{
if (!_isInitialized)
{
lock (_lockThis)
{
ContainerBootstrapper.BootstrapStructureMap();
...
我正在编写单元测试,我知道我可以将范围从HttpContextScoped更改为Hybrid,因为这是我的问题的原因。
然而,作为一个纯粹主义者,我不想为了测试目的更改生产代码,我不想复制粘贴代码块(或整个类文件)来改变范围。
我不介意根据条件(如果它是简洁的)改变范围。
到目前为止,我一直在考虑尝试欺骗我的单元测试,将它们标记为HttpContext作用域并将bool开关添加到服务定位器,可能使用默认参数,这样当我的单元测试通过以下方式调用它时: / p>
_serviceLocator = ServiceLocator.GetInstance(bool httpcontext=false);
例如,但这似乎并不令人满意。我已经检查了结构图网站,但我看到的例子似乎不符合我的目的。
干杯!
答案 0 :(得分:0)
即使它涉及更改生产代码,我最终只是简单地改变了范围方法以使用'HybridHttpOrThreadLocalScoped',因为它显然更优越。