2014-06-25 3 views
4

Notre application utilise Autofac comme conteneur IoC et tire parti de l'enregistrement automatique pour quelques assemblages contenant du code largement utilisé.Définition claire des assemblages pour l'enregistrement automatique

Pour référencer chaque ensemble, on devrait normalement utiliser Assembly.GetAssembly(typeof(<type>)), en utilisant l'un des types dans l'ensemble respectif. Ce n'est cependant pas très clair, car il n'est pas facile de voir quel assembly est enregistré via chaque type, et cela peut aussi conduire à des erreurs lorsque les types sont déplacés entre les projets.

Pour résoudre ce problème, dans chaque assemblée en question, j'ai créé une classe vide appelé Types qui a bien sûr l'espace de nom de l'assemblée, afin que je puisse faire l'enregistrement automatique comme ceci:

builder.RegisterAssemblyTypes(
    Assembly.GetAssembly(typeof(Xx.Common.Types)), 
    Assembly.GetAssembly(typeof(Xx.Core.Types)), 
    Assembly.GetAssembly(typeof(Xx.Infrastructure.Types))) 
    .AsSelf() 
    .AsImplementedInterfaces(); 

Ceci est bien sûr "code mort" sinon. Est-ce une idée bonne ou «intelligente» de le faire de cette façon, ou y a-t-il une idée meilleure, plus idiomatique? Est-ce que je suis stupide pour avoir même pris la peine de poser des questions à ce sujet?

Répondre

3

Je pense que ce que vous faites est en fait assez intelligent. L'approche que je prends est similaire, mais au lieu de créer un nouveau type, je pointe à un type existant (comme vous l'avez fait), mais entièrement la qualité de son nom, comme suit:

typeof(global::Company.Product.BusinessLayer.ICommandHandler<>).Assembly 

Cela rend vraiment clair que nous ciblez la couche de gestion ici et si le type en question est déplacé vers un autre projet, il y aura une erreur de compilation ici.

Questions connexes