我有我認爲我一直在玩/學習的標準.NET MVC3存儲庫模式項目。這是非常標準的結構。NET MVC3服務定位器/依賴項解析器問題與Ninject
- 庫項目(與下文提到的緩存架構)
- 域模型項目
- 服務層項目
- 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<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);
}
基於關我讀過,這似乎是爲服務定位的情景,但我已經看到了它的一些非常強烈的意見(反面模式,等等等等),這和我熟悉它是低 所以我不確定可以工作的實現。
我見過的StackOverflow上的建議來設計Cache類爲標準類和注入ICacheProvider在SingletonScope
kernel.Bind<ICacheProvider>().To<DefaultCacheProvider>().InSingletonScope();
但我個人希望有一個靜態的包裝,易於使用。
ServiceLocator是否設置了去這裏的方法或者是否有其他顯而易見的東西我不知道?如果ServiceLocator是要走的路,是否有與Ninject配合使用? I 知道Ninject現在具有服務定位器功能,但不確定如何實現。
感謝您的任何信息。
非常好的一點。你說的話真的很有道理。感謝您理直頭腦。 – Khepri 2011-04-22 04:05:31
我更新了我的博客帖子,並提到了這種方法。我同意,這是一個更好的方法。 – 2011-09-15 07:39:09