Estou tentando fazer com que o Unity gerencie a criação dos meus objetos e quero ter alguns parâmetros de inicialização que não são conhecidos até o tempo de execução:
No momento, a única maneira de pensar em como fazer isso é ter um método Init na interface.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Então, para usá-lo (no Unity), eu faria o seguinte:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
Nesse cenário, o runTimeParam
parâmetro é determinado no tempo de execução com base na entrada do usuário. O caso trivial aqui simplesmente retorna o valor de, runTimeParam
mas, na realidade, o parâmetro será algo como o nome do arquivo e o método de inicialização fará algo com o arquivo.
Isso cria vários problemas, a saber, que o Initialize
método está disponível na interface e pode ser chamado várias vezes. Definir um sinalizador na implementação e lançar exceção em chamadas repetidas para Initialize
parece muito desajeitado.
No momento em que resolvo minha interface, não quero saber nada sobre a implementação do IMyIntf
. O que eu quero, no entanto, é o conhecimento de que essa interface precisa de determinados parâmetros de inicialização únicos. Existe uma maneira de anotar (atributos?) A interface com essas informações e transmiti-las à estrutura quando o objeto é criado?
Edit: Descreveu a interface um pouco mais.
runTimeParam
é uma dependência que é determinada no tempo de execução com base em uma entrada do usuário. A alternativa para isso deve ser dividida em duas interfaces - uma para inicialização e outra para armazenar valores?