一般的に、私はアプリケーションが IoC コンテナーを完全に認識しないようにしたいと考えています。ただし、アクセスする必要がある場所で問題が発生しました。痛みを抽象化するために、基本的なシングルトンを使用します。丘に向かって走ったりショットガンを取り出したりする前に、解決策を説明させてください。基本的に、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>();
}
キャッスル、スタブ、フェイク、等
これは滑りやすい道ですか?今後、潜在的な問題に遭遇することはありますか?