Entziehen eines IoC-Containers hinter einem Singleton - falsch gemacht?

Im Allgemeinen möchte ich eine Anwendung so einrichten, dass sie den IoC-Container nicht kennt. Ich bin jedoch auf Probleme gestoßen, bei denen ich darauf zugreifen musste. Um die Schmerzen zu lindern, benutze ich einen einfachen Singleton. Bevor du in die Berge rennst oder die Schrotflinte ziehst, lass mich meine Lösung durchgehen. Grundsätzlich macht der IoC-Singleton absolut nichts, er delegiert einfach an eine interne Schnittstelle, die übergeben werden muss. Ich habe festgestellt, dass dies die Arbeit mit dem Singleton weniger schmerzhaft macht.

Below ist der IoC-Wrapper:

public static class IoC
    {
        private static IDependencyResolver inner;

        public static void InitWith(IDependencyResolver container)
        {
            inner = container;
        }

        /// <exception cref="InvalidOperationException">Container has not been init,ialized.   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>();
    }

Ich hatte bisher große Erfolge mit den wenigen Malen, bei denen ich es benutzt habe (vielleicht alle paar Projekte, ich bevorzuge es überhaupt nicht zu verwenden), da ich alles injizieren kann, was ich will: Castle, a Stub, Fakes , etc

Ist das eine glatte Straße? Werde ich später auf potenzielle Probleme stoßen?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage