Pregunta

Me debe hacer lo siguiente:

var someType = ObjectFactory.GetNamedInstance("myNamedInstance");

donde SomeType puede ser cualquier aplicación de ICommand.

por lo que algunos de ellos registrado:

For(typeof(ICommand<>)).Use(typeof(Command1)).Named("myNamedInstance1");
For(typeof(ICommand<>)).Use(typeof(Command2)).Named("myNamedInstance2");

¿hay alguna manera de hacer esto en StructureMap, porque GetNamedInstance requiere el parámetro de tipo I, que don3t sé hasta que el tiempo de ejecución.?

¿Fue útil?

Solución

(Para esto, yo estoy asumiendo ICommand<T> creado)

Esta realidad no tiene ningún sentido ... piensa en la línea:

//where aString is either myNamedInstance1 or myNamedInstance2
var someType = ObjectFactory.GetNamedInstance(aString);

Ahora suponga que no se va a utilizar var, y en su lugar el tipo real. ¿Qué le puso ahí que podría compilar? Es decir, qué tipo puede SomeType posiblemente ser otro que object?

Además, recuerde que ICommand<string> y ICommand<int> son ambos tipos de ICommand<T> construida, pero no están relacionados de otra manera -. No tienen ningún tipo de base común que no sea object

Si no lo hace el tipo hasta el tiempo de ejecución, los genéricos no van a ayudar a un grupo - en lugar de hacer su hereda ICommand<T> de alguna interfaz común - como ICommandBase -. Que tiene los métodos que realmente necesita

Sin embargo, si usted simplemente no sabe el tipo en ese método , que puede empujar a lo desconocido "arriba" en la compilación por lo que el método que contiene ese genérica:

public void Execute<T>( string commandName)
{        
    var someType = ObjectFactory.GetNamedInstance<ICommand<T>>(commandName);
    someType.Execute();
}

Ahora la persona que llama de ejecutar las necesidades del tipo de parámetro ... pero de nuevo que podría empujar a eso. Tenga en cuenta que el tiempo que necesita el parámetro de tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top