Ich gehe über Sandersons Pro ASP.NET MVC Framework und in Kapitel 4 diskutiert er Erstellen einer benutzerdefinierten Controller Factory und es scheint, dass die ursprüngliche Methode AddComponentLifeStyle
oder AddComponentWithLifeStyle
, die zum Registrieren von Controllern verwendet werden, ist jetzt veraltet:
Der neue Vorschlag ist, Register(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle))
zu verwenden, aber ich kann nicht herausfinden, wie man den Typ des implementierenden Controllers in der Methode ImplementedBy<???>()
darstellt. Ich probierte ImplementedBy<t>()
und ImplementedBy<typeof(t)>()
, aber ich kann nicht den geeigneten Weg finden, den Implementierungstyp zu übergeben. Irgendwelche Ideen?
Ich tue dies mit dem ControllerBuilder.SetControllerFactory
und der Code, den Sie im Open-Source-Projekt MvcContrib finden können:
Global.asax.cs
%Vor%WindsorControllerFactory
%Vor%WindsorExtensions (siehe MvcContrib )
%Vor%ControllerExtensions (siehe MvcContrib )
%Vor%Sie sollten auch die neue Installer-Option in der neuesten Windsor-Version in Betracht ziehen. Es gibt mehr Dokumentation zu Windsors Tutorial: Ссылка
Es gibt ein Tutorial (in Arbeit, aber 9 Teile sind bereits draußen), das die Verwendung von Windsor in ASP.NET MVC diskutiert hier . Das ist das auf dem neuesten Stand und für die meisten der üblichen Nutzung Ressource auf dem Thema so weit wie ich weiß.
@Lirik, als Ergänzung: Lassen Sie Ihre eigene benutzerdefinierte IControllerFactory
out, wenn Sie MVC3 verwenden. Registrieren Sie einfach Controller mit Windsor und implementieren Sie IDependencyResolver
mit Windsor-Container darin.
Setzen Sie Ihre IDependencyResolver
als MVC DependencyResolver und DefaultControllerFactory
verbindet automatisch die im Container registrierten Controller (via DependencyResolver
).
etwas wie:
%Vor%ControllersRegistrarMarker ist nur eine leere Klasse in Ihrer Controller-Baugruppe
Tags und Links asp.net-mvc reflection inversion-of-control castle-windsor