2011-09-15 16 views
6

hice mi configuración como ésta:StructureMap, configure using container u objectfactory?

var container = new Container(x => 
               { 
                x.For<IEngine>().Use<V6Engine>(); 
                x.For<ICar>().Use<HondaCar>(); 
               } 
); 

Luego, en mi acción del controlador MVC que hice:

ICar car = ObjectFactory.GetInstance<ICar>(); 

¿Debo configurar mi contenedor utilizando recipiente o ObjectFactory alguna manera? No resuelve, por lo que he probado cosas en la aplicación de corriente alterna # consola y funcionó si lo hiciera:

ICar car = container.GetInstance<ICar>(); 

Pero esto sólo funciona si contenedor está en el ámbito local y en una aplicación web que no es obviamente, ya que las cosas están cableados en global.asax.cs

Respuesta

0

tengo la mía configurado de la siguiente manera

global.asax

ObjectFactory.Initialize(action => 
      { 
       action.For<ISomething>().Use<Something>; 
      }); 

El n en todos lados.

ObjectFactory.GetInstance<ISomething>(); 

Aunque esta puede no ser la única manera. También pienso lo que podría estar buscando es la ObjectFactory

Scan(scanner => 
     { 
      scanner.AssemblyContainingType(....); 
      scanner.AddAllTypesOf(....); 
     } 
+3

btw: tirando objetos directamente de Objectfactory es un anti-patrón ... –

+1

Hola soy bastante nuevo en estructurar el mapa yo mismo - pensé que era solo un anti patrón si usaras ObjectFactory.GetInstance dice en un constructor sin parámetros algo que pasarlo por los parámetros y dejar que el contenedor IoC haga el trabajo? Podrías mejorar un poco más ya que no quiero tomar malos hábitos. son llamadas simples como IService service = ObjectFactory.GetInstance (); bien si no se unen estrechamente dos elementos? – Glenit

3

es una puerta de enlace estática para una instancia de contenedor. Si solo quiere una instancia de un contenedor y quiere una forma simple y estática de hacerlo, use ObjectFactory. Debe inicializar ObjectFactory y luego recuperar sus instancias a través de ObjectFactory.

Como alternativa, si desea administrar la vida útil del contenedor usted mismo, puede crear una instancia de Contenedor, pasando una expresión de inicialización al constructor. A continuación, recupera instancias de la variable que declaró para almacenar el contenedor.

En su ejemplo, está mezclando los dos enfoques, lo que no funciona.