c# Generi c Вопросы предоставления услуг и внедрения - PullRequest
0 голосов
/ 25 марта 2020

У меня есть простой вопрос (надеюсь), на который я нигде не могу найти ответ. Я хочу реализовать обобщенный c (немного сложный) сервис. Репозиторий Github: https://github.com/arnoldsimha/genericRepo-issue Это мой шаблон c Интерфейс:

public interface IContactsService<T> where T : Contact
{
    Task<T> GetContact(string email);
}

Это контакт:

 public class Contact
{
    public string Name { get; set; }
    public string Email { get; set; }
}

Теперь я создал Новый Сервис, который должен реализовать этот интерфейс. Я продлил контакт:

public class AppContact : Contact
{
    public string Id { get; set; }
}

И сервис:

public class MyNewContactService<T> : IContactsService<AppContact>
{
    public async Task<AppContact> GetContact(string email)
    {

    }
}

Вот как я его регистрирую:

services.AddScoped<IContactsService<AppContact>, MyNewContactService<AppContact>>();

Пока все хорошо. Я создал другой сервис, который реализует тот же интерфейс. Могу я спросить, почему, когда я пытаюсь привести MyNewContactService в качестве IContactsService, я получаю нулевое значение?

myNewContactService as IContactsService<AppContact>

Я пытаюсь добавить опцию для выбора реализации в соответствии с указанным c условием.

Спасибо

...