通常,我喜欢让应用程序完全不知道IoC容器.但是我遇到了需要访问它的问题.为了消除痛苦,我使用了一个基本的单身人士.在你跑山或拔出霰弹枪之前,让我回顾一下我的解决方案.基本上,IoC单例绝对没有任何东西,它只是委托给必须传入的内部接口.我发现这使得使用Singleton减少痛苦.
下面是IoC包装器:
public static class IoC { private static IDependencyResolver inner; public static void InitWith(IDependencyResolver container) { inner = container; } ///Container has not been initialized. Please supply an instance if IWindsorContainer. public static T Resolve() { if ( inner == null) throw new InvalidOperationException("Container has not been initialized. Please supply an instance if IWindsorContainer."); return inner.Resolve (); } public static T[] ResolveAll () { return inner.ResolveAll (); } }
的IDependencyResolver:
public interface IDependencyResolver { T Resolve(); T[] ResolveAll (); }
到目前为止,我已经取得了很大的成功,我曾经几次使用它(也许每一个项目一次,我真的不想一直使用它),因为我可以注入任何我想要的东西:城堡,Stub,假货,等等
这是一条湿滑的路吗?我是否会遇到潜在的问题?