Ma mise en œuvre actuelle de certaines applications Web ASP.NET enregistre les classes tous les référentiels et certaines classes de services d'aide dans mon enveloppe autour de conteneur d'unité:Unité: quoi et quand pour enregistrer
public class MyUnityContainer : UnityContainer
{
public MyUnityContainer()
{
string strConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
_context = new MyDataClassesDataContext(strConnectionString);
this
.RegisterInstance(typeof(CMCoreDataClassesDataContext), _context, new ContainerControlledLifetimeManager())
;
// Register Repository classes
this
.RegisterType<IBlockedRegistrationRepository, BlockedRegistrationRepository>()
.RegisterType<ICmOptionRepository, CmOptionRepository>()
.RegisterType<ICommandExecutionLogRepository, CommandExecutionLogRepository>()
...
}
public static T GetContainer<T>(IDictionary items) where T : class, IUnityContainer, new()
{
T container;
lock (Lock)
{
if (items.Contains(UnityKey) == false)
{
container = new T();
items.Add(UnityKey, container);
}
else
{
container = items[UnityKey] as T;
}
}
return container;
}
Voici un exemple comment récipient est instancié (je crée une nouvelle instance du conteneur pour chaque demande, mais une seule instance par demande):
using (IUnityContainer container = MyUnityContainer.GetContainer<McaUnityContainer>(HttpContext.Current.Items))
{ ... }
Tout fonctionne très bien, mais ce que une chose me confond beaucoup: j'ai maintenant presque 50 classes été enregistré chaque fois que le conteneur est créé. Toutes les classes ne sont pas réellement utilisées pour chaque requête ...
N'est-ce pas un surcoût lié à la performance de TOUJOURS enregistrer tout dans un conteneur? Je ne devrais probablement pas instancier une nouvelle instance de conteneur pour chaque requête (et utiliser quelque chose comme un pool de conteneurs)?
Qu'est-ce qu'une recommandation de meilleure pratique pour ce cas?
Merci beaucoup.
Toutes les pensées sont les bienvenues!