通常,我喜歡讓應用程序完全不瞭解IoC容器。但是,我遇到了需要訪問它的問題。爲了抽象出我使用基本單例的痛苦。在爲山丘奔跑或拔出霰彈槍之前,讓我先看看我的解決方案。基本上,IoC單例完全沒有任何問題,它只是委託給一個必須傳入的內部接口。我發現這使得單例工作變得不那麼痛苦。在Singleton後面抽象IoC容器 - 做錯了嗎?
下面是IoC的包裝:
public static class IoC
{
private static IDependencyResolver inner;
public static void InitWith(IDependencyResolver container)
{
inner = container;
}
/// <exception cref="InvalidOperationException">Container has not been initialized. Please supply an instance if IWindsorContainer.</exception>
public static T Resolve<T>()
{
if (inner == null)
throw new InvalidOperationException("Container has not been initialized. Please supply an instance if IWindsorContainer.");
return inner.Resolve<T>();
}
public static T[] ResolveAll<T>()
{
return inner.ResolveAll<T>();
}
}
的IDependencyResolver:
public interface IDependencyResolver
{
T Resolve<T>();
T[] ResolveAll<T>();
}
我已經到目前爲止與我用它幾次(每隔幾個項目,也許一次巨大的成功,我真的不喜歡使用這個),因爲我可以注入任何我想要的東西:城堡,存根,假貨等。
這是一條溼滑的道路嗎?我是否會遇到潛在的問題?