16

निम्नलिखित इंटरफेस और वर्ग परिभाषाओं को ध्यान में रखते:Asp.Net कोर: रजिस्टर कई इंटरफेस और जीवन शैली के साथ कार्यान्वयन सिंगलटन

:

public interface IInterface1 { } 
public interface IInterface2 { } 
public class MyClass : IInterface1, IInterface2 { } 

वहाँ इसी प्रकार अनेक इंटरफेस के साथ MyClass का एक उदाहरण रजिस्टर करने के लिए किसी भी तरह से है

... 
services.AddSingleton<IInterface1, IInterface2, MyClass>(); 
... 

और इस तरह अलग अलग इंटरफेस के साथ MyClass के इस एक उदाहरण को हल:

IInterface1 interface1 = app.ApplicationServices.GetService<IInterface1>(); 
IInterface2 interface2 = app.ApplicationServices.GetService<IInterface2>(); 

उत्तर

18

परिभाषा द्वारा सेवा संग्रह ServiceDescriptor एस का संग्रह है, जो सेवा प्रकार और कार्यान्वयन प्रकार के जोड़े हैं।

आप फिर भी अपने स्वयं के प्रदाता समारोह, इस (धन्यवाद user7224827) की तरह कुछ बनाने के द्वारा इस के आसपास मिल सकती है: नीचे

services.AddSingleton<IInterface1>(); 
services.AddSingleton<IInterface2>(x => x.GetService<IInterface1>()); 

अधिक विकल्प:

private static MyClass ClassInstance; 

public void ConfigureServices(IServiceCollection services) 
{ 
    ClassInstance = new MyClass(); 
    services.AddSingleton<IInterface1>(provider => ClassInstance); 
    services.AddSingleton<IInterface2>(provider => ClassInstance); 
} 

एक और तरीका होगा:

public void ConfigureServices(IServiceCollection services) 
{ 
    ClassInstance = new MyClass(); 
    services.AddSingleton<IInterface1>(ClassInstance); 
    services.AddSingleton<IInterface2>(ClassInstance); 
} 

जहां हम एक ही उदाहरण प्रदान करते हैं।

+36

एक तीसरा रास्ता होगा: 'services.AddSingleton ();' ' services.AddSingleton (x => x.GetService ());' तो फिर तुम वर्ग बनाने की जरूरत नहीं है अपने आप से। –

संबंधित मुद्दे