.NET MVC3 Service Locator / Dependency Resolver Question With Ninject

У меня есть то, что я ' Рассмотрим стандартный проект шаблона репозитория .NET MVC3, с которым я играл / учился. Это довольно стандартная структура.

  • Проект репозитория (с указанной ниже инфраструктурой кэширования)
  • Проект модели домена
  • Проект уровня обслуживания
  • Проект презентации MVC

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

Рассматриваемый класс является оболочкой для использования реализации кэширования AppFabric, которую я только что завершил. (Для тех, кто так склонен, моя реализация основана на

  • Проект репозитория (с указанной ниже инфраструктурой кэширования)
  • Проект модели домена
  • Проект уровня сервиса
  • Проект презентации MVC

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

Рассматриваемый класс является оболочкой для использования реализации кэширования AppFabric, которую я только что завершил. (Для тех, кто так склонен, моя реализация основана на

  • Проект репозитория (с указанной ниже инфраструктурой кэширования)
  • Проект модели домена
  • Проект уровня обслуживания
  • Проект презентации MVC

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

Рассматриваемый класс является оболочкой для использования реализации кэширования AppFabric, которую я только что завершил. (Для тех, кто так склонен, моя реализация основана на http://cgeers.wordpress.com/2010/07/04/windows-server-appfabric-caching/ )

По сути, у меня есть:

  • интерфейс ICacheProvider
  • класс DefaultCacheProvider: ICacheProvider
  • Кэш статического класса (с использованием любой внедренной мной реализации)

Кэш статического класса - это то место, где я хотел бы вставить ICacheProvider, который разрешается в DefaultCacheProvider.

    private static readonly ICacheProvider CacheProvider;

    static Cache()
    {
        //DependencyResolver.Current.GetService();

        //CacheProvider =
        //    (ICacheProvider)ServiceLocator.Current
        //                            .GetInstance(typeof(ICacheProvider));
    }

    public static void Add(string key, object value)
    {
        CacheProvider.Add(key, value);
    }

    public static void Add(string key, object value, TimeSpan timeout)
    {
        CacheProvider.Add(key, value, timeout);
    }

    public static object Get(string key)
    {
        return CacheProvider[key];
    }

    public static bool Remove(string key)
    {
        return CacheProvider.Remove(key);
    }

На основании того, что я прочитал, это похоже на сценарий для ServiceLocator, но я видел несколько очень сильных мнений по этому поводу (анти-шаблон и т. д.), это и мое знакомство с ним низкое так что я не уверен в реализации, которая сработает.

Я видел рекомендацию в StackOverflow разработать класс Cache как стандартный класс и внедрить ICacheProvider в SingletonScope

kernel.Bind().To().InSingletonScope();

, но я лично предпочел бы статическую оболочку для простота использования.

Можно ли здесь настроить ServiceLocator или есть еще что-то очевидное, о чем я не знаю? Если ServiceLocator - лучший вариант, можно ли использовать какую-либо связь с Ninject? я знаю, что Ninject теперь имеет возможности локатора сервисов, но не знал, как их реализовать.

Спасибо за любую информацию.

5
задан Khepri 22 April 2011 в 01:13
поделиться