consideri il seguente esempio:Come eseguire una registrazione in Simple Injector dopo una chiamata GetInstance/soluzione alternativa?
public class CommunicationClient : IClient
{
public CommunicationClient(IServerSettings settings) { ... }
// Code
}
public class SettingsManager : ISettingsManager
{
SettingsManager(IDbSettingManager manager)
// Code
public IDictionary<string, string> GetSettings() { ... }
}
Problema: Durante l'esecuzione di registrazioni (utilizzando SimpleInjector
), ho bisogno di fornire i valori che si ottengono da un'istanza di SetingsManager
e riempire ServerSettings
esempio (tipo concreto per IServerSettings
) ma se chiamo GetInstance<ISettingsManager>
prima di registrare CommunicationClient
, mi dà un errore che io non posso farlo
errore: Il il contenitore non può essere modificato dopo la prima chiamata a GetInstance, GetAllInstances e Verifica.)
Una soluzione potrebbe essere quella di iniettare ISettingsManager
come una dipendenza per CommunicationClient
ma davvero non voglio passare come avrebbe fornito più di informazioni necessarie ad esso.
EDIT: contenitore Registrazione
container.Register(typeof(ICommunicationClient), typeof(CommunicationClient));
ISettingsManager settingsManager = container.GetInstance<ISettingsManager>();
string url = settingsManager.GetSetting("url");
string userName = settingsManager.GetSetting("username");
string password = settingsManager.GetSetting("password");
container.Register(typeof(IServerConfiguration),() =>
new ServerConfiguration(url, userName, password);
Eventuali suggerimenti/soluzioni alternative su come realizzare al di sopra in un modo più pulito? Grazie.
Ho modificato la domanda per includere la registrazione del contenitore. Grazie. – Ali