2010-04-28 17 views
3

je le gestionnaire de vie générique suivantetravailler avec les gestionnaires de vie génériques dans la section de configuration de l'unité

public class RequestLifetimeManager<T> : LifetimeManager, IDisposable 
    { 
    public override object GetValue() 
    { 
     return HttpContext.Current.Items[typeof(T).AssemblyQualifiedName]; 
    } 
    public override void RemoveValue() 
    { 
     HttpContext.Current.Items.Remove(typeof(T).AssemblyQualifiedName); 
    } 
    public override void SetValue(object newValue) 
    { 
     HttpContext.Current.Items[typeof(T).AssemblyQualifiedName] = newValue; 
    } 
    public void Dispose() 
    { 
     RemoveValue(); 
    } 
} 

Comment puis-je faire référence à cela dans la section de configuration de l'unité. Création d'un alias de type

<typeAlias alias="requestLifeTimeManager`1" type=" UI.Common.Unity.RequestLifetimeManager`1, UI.Common" /> 

et en spécifiant comme un gestionnaire de vie

<types> 
    <type type="[interface]" mapTo="[concretetype]" > 
     <lifetime type="requestLifeTimeManager`1" /> 
    </type> 
    </types> 

provoque l'erreur suivante

Cannot create an instance of UI.Common.Unity.RequestLifetimeManager`1[T] because Type.ContainsGenericParameters is true. 

Comment référence ne vous les gestionnaires de vie génériques?

Répondre

4

Vous ne pouvez pas utiliser les alias de type lorsque vous référencez un type générique, vous devez référencer explicitement les types. Ce qui suit fonctionne maintenant

<container name="defaultContainer"> 
    <types> 
    <type type="ILayoutManager" mapTo="LayoutManager" > 
     <lifetime type="Publishing.UI.Common.Unity.RequestLifetimeManager`1[[Publishing.BLL.Managers.LayoutManager, Publishing.BLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c02010e20f60e4d2]], Publishing.UI.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c02010e20f60e4d2" /> 
    </type> 
    </types> 
</container>