Par Thierry Thoua,
jeudi, avril 10 2008.
Lien permanent
.NET
En continuant sur le développement des bibliothèques Lelibre.*, j'ai privilégié l'utilisation de Unity // à ce qui est disponible sur le marché de l'opensource. Ce post n'indique pas ce qu'il faut faire absolument ou ne pas faire. Mais il donne ma vision de découpe ... En effet, voici un mécanisme simple pour avoir un "controleur" regroupant toutes les actions business que l'on pourrait appeler depuis les pages ASPX...
- Configuration de Unity via le fichier de configuration
Il faut commencer par rajouter une section dans le fichier de configuration et le décrire ...
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration" />
<unity>
<typeAliases>
<typeAlias alias="singleton"
type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
Microsoft.Practices.Unity" />
</typeAliases>
<containers>
<container>
<types>
<type type="Controllers.ExempleController, Controllers">
<lifetime type="singleton" />
</type>
</types>
</container>
</containers>
</unity>
- Création du singleton pour l'utilisation de Unity
public static class ContainerUnity
{
public static IUnityContainer Container
{
get
{
if (null == container)
{
lock (locker)
{
if (null == container)
{
container = new UnityContainer();
UnityConfigurationSection section
= (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers.Default.Configure(container);
}
}
}
return container;
}
}
private static IUnityContainer container;
private static object locker = new object();
}
- Développement de la classe parent des pages ASPX
public class CustomPage<T> : System.Web.UI.Page
{
protected T Controller
{
get
{
return ContainerUnity.Container.Resolve<T>();
}
}
}
- Exemple de page ASPX
public class ExempleController
{
public string Key
{
get { return "Salut"; }
}
}
- Page ASPX
public partial class _Default : CustomPage<ExempleController>
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = this.Controller.Key;
}
}
- Voici le résultat ;-)
- Conclusion
Je suis très loin de montrer toutes les possibilités de Unity... Mais je tenterai de vous le faire découvrir prochainement ...
2 réactions
1 De Stiiifff - 11/04/2008, 12:29
Salut Titi,
Pardonne-moi d'avance ... mais il me semble que tu mélanges beaucoup de choses dans ce post ... et aucune n'est vraiment claire ni correcte.
1. De quelle séparation de couches ou découpe parles-tu ? Il n'y a que 3 classes dans ton exemple.
2. Peux-me dire ce qu'Unity t'apporte dans ce cas précis ? Je ne vois qu'une Factory te permettant de créer tes classe Controller. Pas besoin d'Unity pour cela.
3. Es-tu certain que ce la responsabilité des 'actions business' doivent être donnée à un Controller ?
4. As-tu remarqué le couplage fort en ta classe de base CustomPage et la classe du container Unity ? Est-ce voulu?
5. Si ta page fait plusieurs fois appel au Controller, le container va-t-il à chaque fois créer une nouvelle instance ?
6. La configuration XML des controllers est une véritable horreur. T'imagines-tu taper 3 lignes de XML pour enregistrer chaque classe de Controller dans le container ?
2 De Thierry Thoua - 12/04/2008, 10:12
Bon ok mon exemple est peut-être nul :-p. Parce que en effet, le terme controleur n'a pas de sens ici. Et oui ... il manque beaucoup de concepts et d'exemples d'implémentation(interfaces, ...). Mais je voulais montrer l'interêt de Unity en quelques lignes (à première vue j'ai complètement échoué ^^). Donc j'accepte les remarques justifiées !!! En réponse à tes questions, critiques, ... ;-)