je pense qu'il est là-dedans, mais il est assez enterré. En général, j'utilise l'extension suivante:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Microsoft.Practices.Unity;
namespace NBody.Viewer.Unity
{
public class QueryableContainerExtension : UnityContainerExtension
{
private List<RegisterEventArgs> _registrations;
public IList<RegisterEventArgs> Registrations
{
get { return new ReadOnlyCollection<RegisterEventArgs>(_registrations); }
}
private List<RegisterInstanceEventArgs> _instanceRegistrations;
public IList<RegisterInstanceEventArgs> InstanceRegistrations
{
get { return new ReadOnlyCollection<RegisterInstanceEventArgs>(_instanceRegistrations); }
}
protected override void Initialize()
{
_registrations = new List<RegisterEventArgs>();
_instanceRegistrations = new List<RegisterInstanceEventArgs>();
Context.Registering += (s, e) => _registrations.Add(e);
Context.RegisteringInstance += (s, e) => _instanceRegistrations.Add(e);
}
public bool IsTypeRegistered<TFrom, TTo>()
{
return _registrations.Exists(e => e.TypeFrom == typeof(TFrom) && e.TypeTo == typeof(TTo));
}
public bool IsTypeRegistered<TFrom>()
{
return _registrations.Exists(e => e.TypeFrom == typeof(TFrom));
}
}
}
Ensuite, vous pouvez écrire du code comme ceci:
[Fact]
public void IsTypeRegisteredReturnsTrueForRegisteredType()
{
QueryableContainerExtension target = new QueryableContainerExtension();
IUnityContainer container = new UnityContainer();
container.AddExtension(target);
container.RegisterType<IEnumerable, Array>();
Assert.True(target.IsTypeRegistered<IEnumerable, Array>());
Assert.True(target.IsTypeRegistered<IEnumerable>());
Assert.False(target.IsTypeRegistered<IEnumerable, SortedList>());
Assert.False(target.IsTypeRegistered<IList>());
}
Vous pouvez utiliser cette approche ou vous pouvez envelopper ou modifier la source pour le conteneur pour ajouter un attribut DebuggerDisplay et une méthode qui utilise le code ci-dessus pour parcourir le contenu du conteneur.
Espérons que cela aide!
Oui, j'ai utilisé Windsor avant et a réussi à obtenir cette information. Je suis obligé d'utiliser Unity pour le moment et j'ai besoin de savoir comment le faire pour Unity en particulier. –