Использование сессии ASP.NET для пожизненного управления (единица)

Вы передаете ключ API, как если бы он был как-то определен, но это не так. Это должна быть строка

@client = GooglePlaces::Client.new("your api key") # between quotes

или переменная

api_key = "your api key"
@client = GooglePlaces::Client.new(api_key)
17
задан 1 April 2009 в 20:07
поделиться

7 ответов

Я думал бы, что Вам нужны два сервиса, которые Вы подвергаете через единицу (или один сервис, который делает оба действия).

Вместо того, чтобы хранить пользовательский объект, сохраните интерфейсную реализацию, которая выставляет метод/свойство, который получит пользовательский объект для Вас. В случае ASP.NET Вы получаете пользователя от сессии. В решении WinForm (или безотносительно), можно получить его от выполняющегося потока.

У Вас также был бы метод установки / свойством также, которое Вы будете использовать для установки пользователя.

0
ответ дан 30 November 2019 в 14:29
поделиться

Sounds like actually you need Registry pattern, not Unity.

http://martinfowler.com/eaaCatalog/registry.html

0
ответ дан 30 November 2019 в 14:29
поделиться

Почему бы вместо этого не использовать объект кеша ... тогда вы можете использовать его как из Win, так и из Интернета. Примерно так:

    IUnityContainer container= HttpRuntime.Cache.Get("Unity") as IUnityContainer;

    if (container == null)
    {
        container= // init container

        HttpRuntime.Cache.Add("Unity",
            container,
            null,
            Cache.NoAbsoluteExpiration,
            Cache.NoSlidingExpiration,
            CacheItemPriority.NotRemovable,
            null);
    }

    // return container or something

HttpRuntime.Cache будет работать как в Win, так и в Интернете

2
ответ дан 30 November 2019 в 14:29
поделиться

Мои извинения, если это не совсем правильно, но ...

Unity - это платформа для разработки игр, поэтому я предполагаю, что вы создаете 3d-приложение или игру, с которой собираетесь сделать что-то крутое (например, сделать ее многопользовательской / отслеживать прогресс пользователей с помощью сервера).

Почему бы не заставить каждого пользователя войти в систему, тогда вы сможете использовать классы MembershipProvider и Formsauthentication для получения доступа к идентификатору/имени пользователя.

На вашем сервере вы просто связываете всю информацию с информацией о пользователе, что позволяет вам легко извлекать данные (простой ajax / обычный http запрос), соответствующие ситуации / запросу пользователя.

Я не знаю этого наверняка, но я полагаю, что единство - это то, что развертывается на стороне клиента, поэтому никакой интеграции с ним не нужно делать на сервере.

Просто запрашивайте то, что вам нужно, и обрабатывайте это на стороне клиента.

Таким образом, вы придерживаетесь классического n-уровневого паттерна проектирования, который позволяет отделить логику от хранения данных и пользовательского интерфейса.

Надеюсь, это поможет...

-5
ответ дан 30 November 2019 в 14:29
поделиться

Вы получите лучший результат с Unity при использовании с ASP.Net MVC, а не с простым старым проектом ASP.Net. ASP.Net MVC позволяет использовать контейнер, такой как Unity, для управления пользовательскими объектами, контроллерами, моделями и т. Д. Если возможно, используйте для своих проектов веб-формы MVC, а не ASP.net.

Если я правильно понял ваш вопрос, вы можете использовать Unity для поддержания времени жизни объекта на сеанс. Вам необходимо реализовать SessionLifetimeManager, расширяющий LifetimeManager. Код довольно прост и состоит из следующих строк:

public class SessionLifetimeManager : LifetimeManager
{
    private string _key = Guid.NewGuid().ToString();

    public override object GetValue()
    {
          return HttpContext.Current.Session[_key];
    }

    public override void SetValue(object value)
    {
          HttpContext.Current.Session[_key] = value;
    }

    public override void RemoveValue()
    {
          HttpContext.Current.Session.Remove(_key);
    }
}

Вы также можете написать аналогичный код для управления временем жизни PerWebRequest.

15
ответ дан 30 November 2019 в 14:29
поделиться

Может быть, я слишком много думаю, но я думаю, что вам следует использовать AoP вместе с IoC. Это действительно прекрасная пара. По сути, я бы сделал так: перехватил конструктор классов, которые вы разрешаете, иначе это называется созданием аспекта. Затем вы могли бы ввести пользователя в класс при входе в конструктор, но то, что разрешает класс, не должно явно предоставлять пользователя, предотвращая таким образом сопряжение с Unity.

PostSharp - отличный AoP-фреймворк IMHO.

В конечном итоге ваше приложение будет зависеть от AoP-фреймворка, но полностью развязанное приложение может быть нереальным в зависимости от вашего окружения. Вы можете быть удивлены, насколько полезной может быть комбинация AoP и IoC.

0
ответ дан 30 November 2019 в 14:29
поделиться

Если под "пользовательским менеджером сессий ASP.NET" вы имеете в виду сессию NHibernate или Data/ObjectContext, то похоже, что вам нужен IUserRepository, внедренный либо в конструктор, либо в сеттер свойства, из которого вы могли бы получить объект User. Реализация IUserRepository может быть любой - от доступа к базе данных до бэкенд-кэша и т.д. Если вы используете .Resolve() непосредственно на контейнере, вы следуете шаблону Service Locator и не используете Unity должным образом для всего, что он может предоставить.

Затем вы можете использовать ответ Рави для управления временем жизни хранилища.

0
ответ дан 30 November 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: