IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

DotNetMatt

Comment utiliser Ninject dans un Azure Worker Role

Noter ce billet
par , 26/01/2016 à 12h02 (754 Affichages)
Pour utiliser Ninject dans un Worker Role, il faut tout d'abord installer 2 packages Nuget :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Install-Package Ninject
Install-Package Ninject.Extensions.Azure
Le code source du package Ninject.Extensions.Azure est disponible ici : https://github.com/ninject/Ninject.Extensions.Azure

Votre classe WorkerRole hérite par défaut de la classe abstraite Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint. Il faut la modifier pour qu'elle hérite de la classe abstraite Ninject.Extensions.Azure.NinjectRoleEntryPoint :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
public class WorkerRole : NinjectRoleEntryPoint
{ }
A ce stade, vous pouvez supprimer les méthodes OnStart et OnStop qui ne sont plus utilisables avec la classe NinjectRoleEntryPoint. Il faut les remplacer par les méthodes suivantes :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// <summary>
/// Déclenchée après la création du Kernel.
/// </summary>
protected override bool OnRoleStarted()
{ }
 
/// <summary>
/// Déclenchée pendant l'arrêt du Worker Role, avant que le Kernel ne soit disposé.
/// </summary>
protected override void OnRoleStopping()
{ }
 
/// <summary>
/// Déclenchée pendant l'arrêt du Worker Role, après que le Kernel ait été disposé.
/// </summary>
protected override void OnRoleStopped()
{ }
 
/// <summary>
/// Dans cette méthode vous devez créer le Kernel et charger les modules dont vous avez besoin.
/// </summary>
protected override IKernel CreateKernel()
{ }
Au final, voici un exemple de Worker Role utilisant Ninject :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public class WorkerRole : NinjectRoleEntryPoint
{
	private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
	private readonly ManualResetEvent runCompleteEvent = new ManualResetEvent(false);
 
	private IKernel _kernel;
 
	private IRepository _repository;
 
	public override void Run()
	{
		Trace.TraceInformation("WorkerRole1 is running");
 
		try
		{
			this.RunAsync(this.cancellationTokenSource.Token).Wait();
		}
		finally
		{
			this.runCompleteEvent.Set();
		}
	}
 
	/// <summary>
	/// Déclenchée après la création du Kernel.
	/// </summary>
	protected override bool OnRoleStarted()
	{
		// Set the maximum number of concurrent connections
		ServicePointManager.DefaultConnectionLimit = 12;
 
		// For information on handling configuration changes
		// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
 
		bool result = base.OnStart();
 
		Trace.TraceInformation("WorkerRole1 has been started");
 
		this._repository = this._kernel.Get<IRepository>();
 
		return result;
	}
 
	/// <summary>
	/// Déclenchée pendant l'arrêt du Worker Role, avant que le Kernel ne soit disposé.
	/// </summary>
	protected override void OnRoleStopping()
	{
	}
 
	/// <summary>
	/// Déclenchée pendant l'arrêt du Worker Role, après que le Kernel ait été disposé.
	/// </summary>
	protected override void OnRoleStopped()
	{
		Trace.TraceInformation("WorkerRole1 is stopping");
 
		this.cancellationTokenSource.Cancel();
		this.runCompleteEvent.WaitOne();
 
		base.OnStop();
 
		Trace.TraceInformation("WorkerRole1 has stopped");
	}
 
	/// <summary>
	/// Dans cette méthode vous devez créer le Kernel et charger les modules dont vous avez besoin.
	/// </summary>
	protected override IKernel CreateKernel()
	{
		this._kernel = new StandardKernel();
 
		this._kernel.Bind<IRepository>().To<Repository>();
 
		return this._kernel;
	}
 
	private async Task RunAsync(CancellationToken cancellationToken)
	{
		while (!cancellationToken.IsCancellationRequested)
		{
			Trace.TraceInformation("Working");
 
			// La logique du Worker Role doit être mise ici :
			var rep = this._repository.A();
		}
	}
}

Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Viadeo Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Twitter Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Google Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Facebook Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Digg Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Delicious Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog MySpace Envoyer le billet « Comment utiliser Ninject dans un Azure Worker Role » dans le blog Yahoo

Mis à jour 26/01/2016 à 12h25 par DotNetMatt

Catégories
DotNET , C#

Commentaires