Also Im Autofac in einem MVC verwenden, so dass meine Controller können Abhängigkeiten dort Konstruktor injiziert haben, habe ich in meinem Global.asax Ich habe den folgenden Code-Schnipsel, der funktioniert.Verwenden von Autofac Registrierung alles, was mit Service endet
// Register your MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<PurchaseOrderSearchService>().As<IPurchaseOrderSearchService>().WithParameter("context", new PurchaseOrderManagerContext());
// Set the dependency resolver to be Autofac.
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Das Problem ist, ich will nicht builder.RegisterType immer und immer wieder tun, für alle meine Leistungen. Wie mache ich das?
ich denke, die Art von Sache, die ich will, ist
builder.RegisterAssemblyTypes(foo)
.Where(t => t.Name.EndsWith("Services"))
.WithParameter("context", new PurchaseOrderManagerContext());
Aber keine Ahnung, was sollte foo sein. Oder wenn RegisterAssemblyTypes richtig ist. Ich weiß Codierung nach Konvention ist die Lösung, aber nicht sicher, was die Konvention ist. Alle meine Dienste int Wort Dienst beenden und muss Schnittstelle
so wird FooService Schnittstelle IFooService haben und Barservice werden Schnittstelle IBarService haben
auch darauf hinweisen, dass alle Dienste in einer Klassenbibliothek leben genannt PurchaseOrderManager. Service
Prost, ich denke, das ist, was ich will ... aber ich habe alle Dienste leben in einer Klassenbibliothek namens PurchaseOrderManager.Service ist so werfen Fehler Keine der Konstruktoren gefunden mit 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder 'on type' PurchaseOrderManager.Controllers.PurchaseOrderSearchController 'kann mit den verfügbaren Diensten und Parametern aufgerufen werden: Der Parameter' PurchaseOrderManager.Service.Services.Interfaces.IPurchaseOrderSearchService 'des Konstruktors' Void .ctor (PurchaseOrderManager.Service.Services.Interfaces .IPurchaseOrderSearchService) '. –
Antwort aktualisiert. – Richard
Ich ging mit dem Autofac-Modell. Ich habe geschützt override void Load (ContainerBuilder builder) { // "ThisAssembly" bedeutet "jede Art in der gleichen Anordnung wie das Modul" builder.RegisterAssemblyTypes (ThisAssembly) .Where (t => t.Name.EndsWith ("Services")) .WithParameter ("context", neuer PurchaseOrderManagerContext()) .AsImplementedInterfaces(); } Aber das wird nie aufgerufen werden, da es nichts als eine Klassenbibliothek überschreiben –