Estoy intentando que Unity gestione la creación de mis objetos y quiero tener algunos parámetros de inicialización que no se conocen hasta el tiempo de ejecución:
Por el momento, la única forma en que puedo pensar en hacerlo es tener un método Init en la interfaz.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Luego, para usarlo (en Unity), haría esto:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
En este escenario, el runTimeParam
parámetro se determina en tiempo de ejecución según la entrada del usuario. El caso trivial aquí simplemente devuelve el valor de runTimeParam
pero en realidad el parámetro será algo así como el nombre del archivo y el método de inicialización hará algo con el archivo.
Esto crea una serie de problemas, a saber, que el Initialize
método está disponible en la interfaz y se puede llamar varias veces. Establecer una marca en la implementación y lanzar una excepción en llamadas repetidas Initialize
parece torpe.
En el punto donde resuelvo mi interfaz, no quiero saber nada sobre la implementación de IMyIntf
. Sin embargo, lo que sí quiero es saber que esta interfaz necesita ciertos parámetros de inicialización únicos. ¿Hay alguna manera de anotar de alguna manera (atributos) la interfaz con esta información y pasarlos al marco cuando se crea el objeto?
Editar: describió la interfaz un poco más.
runTimeParam
es una dependencia que se determina en tiempo de ejecución en función de una entrada del usuario. ¿La alternativa para esto debería ser dividirlo en dos interfaces: una para la inicialización y otra para almacenar valores?