Ядро asp.net не зависит Зависимость .NET Framework 4.5.1 библиотеки - PullRequest
0 голосов
/ 09 июля 2019

У меня есть унаследованное приложение, в качестве точки входа которого используется WCF, и интерфейс ввода зависимостей создан в проекте .net framework 4.5.1. я пытаюсь заменить слой wcf ядром asp.net, и когда я пытаюсь внедрить зависимости, используя DI ядра по умолчанию для asp.net, я получаю

Исключение: InvalidOperationException - Текущий тип, xxxx, является интерфейсом и не может быть создан. Вам не хватает отображения типов?

Я пробовал это с ядром Asp.net 2.2 с целевой платформой 4.6.1, а также с ядром asp.net 2.1, где целевой платформой установлено .net ядро ​​2.1

моя настройка DI в ядре asp.net выглядит следующим образом

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddSingleton<ITradeBusinessService, TradeBusinessService>();
        services.AddSingleton<IUnityContainer, UnityContainer>();
        services.AddSingleton<ICommonDataRepository, CommonDataRepository>();
    }

эта служба TradeBusinessService принимает IUnityContainer в конструкторе.

        public TradeBusinessService(IUnityContainer objectContainer)
    {
        container = objectContainer;
        commonRepository = container.Resolve<ICommonDataRepository>();

и когда я пытаюсь разрешить ICommonDataRepository, я получаю ошибку выше.

ICommonDataRepository в проекте, нацеленном на 4.5.1

есть идеи, что я здесь делаю не так?

1 Ответ

0 голосов
/ 09 июля 2019

UnityContainer - это просто еще одна DI-инфраструктура, подобная Dependency Injection в Asp.net Core.Зачем вам оба?В любом случае, проблема в том, что вы создаете новый и пустой контейнер единиц и внедряете его в TradeBusinessService.В нем не зарегистрировано типа ICommonDataRepository.Мой совет, избавьтесь от UnityContainer и просто введите ICommonDataRepository в TradeBusinessService напрямую.

...