Esto es lo que quiero de contenedor DI:qué contenedor DI va a satisfacer esta
public class Class
{
public Class(IDependency dependency, string data) { }
}
var obj = di.Resolve<Class>(() => new Class(null, "test"));
Puntos de interés:
- puede resolver tanto la dependencia y los datos en el constructor.
- Puede usar la sintaxis de tipo seguro para pasar los parámetros del constructor (la sintaxis exacta puede variar). Sí, puedo hacerlo yo mismo obteniendo argumentos de constructor de (Expression.Body como NewExpression), pero necesitaré una forma de detectar qué argumentos están registrados en el contenedor.
Otro requisito importante es que me gustaría que mis componentes se recojan automáticamente, es decir, no deseo registrar Clase: quiero que IoC lo recoja porque sabe cómo resolver la dependencia de ID.
Además, la inyección de propiedades puede ser útil a veces, pero esto es opcional.
La cuestión es realmente acerca de la combinación de características - tener todas ellas - tipo seguro, parámetros, recogida automática ... Es fácil verificar una característica, pero una combinación de ellas no es fácil de verificar a menos que uno esté familiarizado con un contenedor particular y conozca sus características. Por lo tanto, la pregunta.
No creo que haya ningún contenedor que admita ese tipo de sintaxis. Pero muchos (casi todos) contenedores admiten parámetros de contenedor explícitos, y probablemente con una sintaxis más limpia. –
"Probablemente" no es la respuesta ... hasta donde sé puedo pasar la matriz de parámetros object [] pero obviamente no es seguro para tipos ... Puedo cambiar el orden de los parámetros y no sabré nada hasta el tiempo de ejecución . – queen3
Por limpiador quise decir que no necesita usar explícitamente el código en su código, como lo hace arriba. En lugar de lo que escribió, ¿por qué no? 'Var obj = new Class (di.Resolve()," test ");'? –