Je suis en train de lire ma configuration de la configuration SF en utilisant le « ConfigurationPackage » qui est disponible à partir de tout contexte de SF. Ma classe ressemble à ceci:Injecter Servics Tissu ServiceContext dans les implémentations utilisant DI Config
internal class ServiceFabricDbConfiguration : IDbConnectionConfig
{
private ConfigurationPackage _configurationPackage;
public ServiceFabricDbConfiguration(ServiceContext context)
{
_configurationPackage = context.CodePackageActivationContext.GetConfigurationPackageObject("Config");
}
public string UserName =>
_configurationPackage.Settings.Sections["Db_Configuration"]
.Parameters[
"Username"]
.Value;
}
J'utilise autofac comme mon conteneur DI, et peut enregistrer la classe ci-dessus en capturant explicitement une référence au ServiceContext quand je l'enregistrer avec le moteur d'exécution SF:
ServiceRuntime.RegisterServiceAsync("ApiType",
context =>
{
Bootstrapper.SetContext(context);
return new Api(context);
})
.GetAwaiter()
.GetResult();
Est-il possible que je puisse enregistrer le ServiceContext avec le programme d'amorçage, idéalement dans la classe bootstrapper?
J'expérimente actuellement avec l'aide Autofac.ServiceFabric pour enregistrer mes acteurs/services, mais qui cache le rend si ServiceContext ci-dessus plus difficile à réaliser à nouveau (mais ne le rendre beaucoup plus facile de maintenir les définitions du module autofac propres)
Je ne sais pas ce que votre classe est Bootstrapper, mais peu importe .. Il y a la méthode statique 'GetActivationContext()' 'dans FabricRuntime'. Ne pouvez-vous pas exploiter cela? – Mardoxx
Je voudrais, si vous ne l'avez pas déjà fait, envisager sérieusement de regarder les extensions autofac de Service Fabric. C'est im bêta pour le moment mais je l'ai utilisé sans problème. https://github.com/autofac/Autofac.ServiceFabric – Mardoxx
Ah - je ne l'avais pas remarqué FabricRuntime (avait utilisé FabricClient mais ServiceContext ne sont pas disponibles par ce) - des thats parfait, merci Mardoxx. Si vous ajoutez ceci comme réponse, je l'accepterai. Yup - Je change juste nos projets pour utiliser Autofac.ServiceFabric, mais je ne pense pas qu'ils aient une extension de construction pour cela? [Excuses - Bootstrapper est la classe avec les enregistrements autofac] –