J'utilise la méthode décrite par Bojan Resnik dans this question pour résoudre les instances de classes qui ne sont pas enregistrées dans le conteneur Windsor. Le problème est que je ne veux pas que ces classes soient disponibles en tant que "services" aux autres instances résolues.Castle IoC - Comment puis-je empêcher les composants enregistrés d'être résolus en tant que dépendances?
Par exemple, étant donné les classes suivantes:
class Order
{
public Order(ITaxCalculator tc)
{
// ...
}
}
class SomeOtherThing
{
public SomeOtherThing(ISomeOtherService sos)
{
// ...
}
Order CurrentOrder
{
get;
set;
}
}
static class WindsorExtensions
{
public static object Create(this IWindsorContainer container, Type type)
{
if (!type.IsClass)
{
throw new ArgumentException("not class", "type");
}
if (!container.Kernel.HasComponent(type))
{
container.Kernel.AddComponent(type.FullName, type, LifestyleType.Transient);
}
return container.Resolve(type);
}
public static T Create<T>(this IWindsorContainer container)
{
return (T)ResolveType(container, typeof(T));
}
}
Je veux pouvoir dire:
Order order = container.Create<Order>();
SomeOtherThing thing = container.Create<SomeOtherThing>();
Mais je ne veux pas une nouvelle instance de l'ordre pour obtenir injecté dans la propriété CurrentOrder de SomeOtherThing. Fondamentalement, je veux que le conteneur crée l'instance pour que les dépendances puissent être injectées, mais je ne veux pas que les classes puissent être injectées dans d'autres classes.
Cela ne me dérange pas d'avoir à écrire des extensions supplémentaires dans le conteneur afin d'y parvenir si quelqu'un peut me diriger dans la bonne direction.