У меня есть то, что я считаю стандартным шаблоном репозитория .NET MVC3, с которым я играю / учусь.Это довольно стандартная структура.
- Проект репозитория (с упомянутой ниже инфраструктурой кэширования)
- Проект доменной модели
- Проект сервисного уровня
- Презентация MVCproject
Я столкнулся со сценарием, в котором мне нужно внедрить закрытый член класса, в котором есть только статический конструктор, из-за чего мне не везет в конструктор.
Рассматриваемый класс является оболочкой для использования реализации кэширования 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<ICacheProvider>();
//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<ICacheProvider>().To<DefaultCacheProvider>().InSingletonScope();
, но ялично я предпочел бы статическую оболочку для простоты использования.
Является ли установка ServiceLocator подходом или есть что-то еще очевидное, чтоЯ не в курсе?Если ServiceLocator - это путь, есть ли связь с Ninject для использования?Я знаю, что Ninject теперь имеет возможности поиска сервисов, но не знал, как это реализовать.
Спасибо за любую информацию.