1

Ich bin ein Anfänger zu den DI-Containern.So aktualisieren Sie bereits registrierten Service Castle Windsor

Ich bin mit Dritten Rahmen, und es hat eine Klasse wie unten

public class PurchaseOrderAppService : IPurchaseOrderAppService, IAutoRegister 
    { 
     private readonly IEmail _email; 

     public PurchaseOrderAppService(IEmail email) 
     { 
      _email = email; 
     } 
    } 

Alle Klassen, die IAutoRegister Schnittstelle erbt von dem Dritten Rahmen automatisch registriert werden. E-Mail-Klasse ist wie unter

public class Email : IEmail, IAutoRegister 
{ 
    public Send(string message) 
    { 
     //Send a message 
    } 
} 

Was ich will, ist, dass ich PurchaseOrderAppService Klasse will eine andere Klasse verwenden genannt myemail statt E-Mail.

public class MyEmail : IEmail 
{ 
    public Send(string message) 
    { 
     //Send a message another way 
    } 
} 

Wie kann ich bereits registrierten Service von Framework aktualisieren?

Danke.

+0

Wie lautet der Name des dritten Teil-Frameworks? Wie funktioniert es? –

+0

@YacoubMassad, Der Name der dritten Partei ist hier nicht wichtig, Was ich wissen möchte ist, wie ich den Dienst aktualisieren kann, der bereits in DI-Container registriert ist. –

+0

Haben Sie Zugriff auf den Container? Können Sie die bestehenden Registrierungen anzeigen? –

Antwort

0

Dank @Thuan,

Im zweiten Link gibt Methode ServiceOverrides genannt wird, die überholt ist, und ich DependsOn stattdessen verwenden könnte,

IocContainer.Register(
    Component.For<IEmail>() 
    .ImplementedBy<MyEmail>() 
    .Named("Email.MyEmail"), 
    Component.For<IPurchaseOrderAppService>() 
    .ImplementedBy<PurchaseOrderAppService>() 
    .Named("PurchaseOrderAppServiceWithMyEmail").IsDefault() 
    .DependsOn(Dependency.OnComponent(typeof(IEmail), "Email.MyEmail"))); 
Verwandte Themen