Ich verwende die von Bojan Resnik in this question beschriebene Methode, um Instanzen von Klassen aufzulösen, die nicht im Windsor-Container registriert sind. Das Problem besteht darin, dass diese Klassen nicht als "Dienste" für andere aufgelöste Instanzen verfügbar sein sollen.Castle IoC - Wie kann ich verhindern, dass registrierte Komponenten als Abhängigkeiten aufgelöst werden?
Zum Beispiel angesichts der folgenden Klassen:
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));
}
}
Ich möchte sagen können:
Order order = container.Create<Order>();
SomeOtherThing thing = container.Create<SomeOtherThing>();
Aber ich will nicht eine neue Instanz des Ordens in bekommen injiziert die CurrentOrder-Eigenschaft von SomeOtherThing. Grundsätzlich möchte ich, dass der Container die Instanz erstellt, damit die Abhängigkeiten injiziert werden können, aber ich möchte nicht, dass die Klassen für die Injektion in andere Klassen verfügbar sind.
Ich habe nichts dagegen, dass ich zusätzliche Erweiterungen in den Container schreiben muss, um dies zu erreichen, wenn mir jemand in die richtige Richtung zeigen kann.