Должна ли я структурировать карту с помощью Entity Framework, построенной правильно с помощью управления контекстом в проекте wcf

1

Я читал другие сообщения об этом и загружался в сеть, но я все еще не уверен, если у меня есть все правильно.

Я использую servicehostfactory для инициализации StructureMap в соответствующем сервисе.. (на основе этого) Snippet ниже..

 public class StructureMapServiceHostFactory : ServiceHostFactory
    {
        public StructureMapServiceHostFactory()
        {
            Bootstrapper.ConfigureDependencies();
        }

        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            return new StructureMapServiceHost(serviceType, baseAddresses);
        }
    }

и бутстрапинг..

public static IContainer ConfigureDependencies()
        {
            if (AlreadyRegistered)
            {
                return ObjectFactory.Container;
            }

            lock (_lockThis)
            {
                if (AlreadyRegistered)
                {
                    return ObjectFactory.Container;
                }

                BootstrapStructureMap();
                AlreadyRegistered = true;
            }

            return ObjectFactory.Container;
        }

public static void BootstrapStructureMap()
        {
            ObjectFactory.Initialize(x =>
            {
                x.AddRegistry<InfrastructureRegistry>();
            });
        }

 public class InfrastructureRegistry : Registry
    {
        public InfrastructureRegistry()
        {
            For<Entities>().HybridHttpOrThreadLocalScoped().Use(c => new Entities());

...

Регистрация моего контекста Entity Framework - HybridHttpOrThreadLocalScoped. В Application_EndRequest я выпускаю объекты с ограниченным доступом к http, которые должны быть только контекстом db, так как это я хочу для каждого запроса службы.

protected void Application_EndRequest(object sender, EventArgs e)
        {
Bootstrapper.ReleaseAndDisposeAllHttpScopedObjects();
        }

    public static void ReleaseAndDisposeAllHttpScopedObjects()
    {
        ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
    }

Это правильный подход или я что-то упускаю? Таким образом, мне не нужно использовать оператор using вокруг моего контекста, так как он должен быть привязан к этому запросу, а следующий запрос получает другой.

Основная причина заключается в том, что время от времени, когда я получаю доступ к субобъекту объекта, объект имеет значение null, тогда как он должен быть, и я пытаюсь устранить тот факт, что это может быть общий контекст.

Я попытался выписать контекст на Application_EndRequest

var instance = StructureMap.ObjectFactory.GetInstance<AXA_Entities.Entities>(); - write to file then

и hashCode был уникален, но Calling GetInstance будет каждый раз получать новый экземпляр каждый раз, когда я представляю?

Я думаю, что я близко к этому, но объяснение чего-то, что я, возможно, отсутствует, оценили.

В идеале я хочу, чтобы моя область была такой.

For<Entities>().HttpContextScoped().Use(c => new Entities());

но в результате я получаю следующий метод.

"StructureMap Exception Code:  309\nYou cannot use the HttpContextLifecycle outside of a web request. Try the HybridLifecycle instead."
Теги:
entity-framework
structuremap
wcf
dbcontext

1 ответ

1
Лучший ответ

unitofwork-in-wcf-using-structuremap ответил, что я должен делать. Есть и другие ссылки внутри, поэтому внимательно прочитайте. Я не использую интерфейс uow, но пользовательский жизненный цикл - это то, что я использовал в конце.

на версии 2.6.4 структуры map - последняя версия изменила некоторые интерфейсы, так что пока еще не обновлена.

For<Entities>().LifecycleIs(new WcfInstanceContextLifecycle()).Use(c
=> new Entities());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню