2017-01-23 12 views
16

Xét giao diện và lớp định nghĩa sau đây:Asp.Net Core: đăng ký thực hiện với nhiều giao diện và lối sống Singleton

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

là có cách nào để đăng ký một ví dụ của MyClass với nhiều giao diện như thế này:

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

và giải quyết các trường hợp duy nhất này của MyClass với giao diện khác nhau như thế này:

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

Trả lời

18

Bộ sưu tập theo định nghĩa dịch vụ là bộ sưu tập của ServiceDescriptor s, là các loại dịch vụ và loại triển khai.

Tuy nhiên bạn có thể khắc phục điều này bằng cách tạo chức năng của riêng bạn cung cấp, một cái gì đó như thế này (nhờ user7224827):

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

Các tuỳ chọn khác bên dưới:

private static MyClass ClassInstance; 

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

Một cách khác sẽ là:

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

Nơi chúng tôi chỉ cung cấp cùng một trường hợp.

+36

Một cách thứ ba sẽ được: 'services.AddSingleton (); ' ' services.AddSingleton (x => x.GetService ());' Sau đó, bạn không cần phải tạo ra các lớp một mình. –

Các vấn đề liên quan