с StructureMap мы делаем:Самое элегантное решение для изменения контекста StructureMap
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 в локатор службы, возможно, с аргументом по умолчанию, например, когда мой модульный тест вызывает его через:
_serviceLocator = ServiceLocator.GetInstance(bool httpcontext=false);
Например, это просто не выглядит удовлетворительным. Я проверил сайт structuremap, но примеры, которые я видел, похоже, не соответствуют моей цели.
Cheers!
Вы пробовали условные константы компиляции? –
@AdrianStanculescu Нет сэр - не могли бы вы пояснить в этом случае, пожалуйста? – notsoobvious