Проблема с настройкой Dependency Injection в сетевом фреймворке 4.6.1 без параметров - PullRequest
0 голосов
/ 07 ноября 2019

Я создаю новый сервис WCF на основе некоторого старого кода. Я думаю, что я сделал все то же самое, но во время создания класса с использованием DI я получаю ошибку:

Для этого объекта не определен конструктор без параметров.

Ниже приведен мой новый код, основанный на основахрабочий один:

public SChangeClaimHandlerStatusDTO ChangeClaimHandler(SChangeClaimHandlerMessageDTO message)
{
    (...)
    var status =
        ServiceProvider<VIG.ZEVIG.BusinessLayer.BusinessLogic.Order.S.SIntegrationService>
            .Service.ChangeClaimHandler(message);
    //line above is causing error
    (...)
    return status;
}

и ниже называется класс:

public class SIntegrationService : ServiceBase 
{
    private const int SImageExpirationTimeInMinutes = 60;

    public SIntegrationService(
        IDocumentService documentService,
        IAttachmentService attachmentService,
        IUserService userService,
        ITextEncryptor textEncryptor, (...) )
    {
        RegisterService<IDocumentService>(documentService);
        RegisterService<IAttachmentService>(attachmentService);
        RegisterService<IUserService>(userService);
        RegisterService<ITextEncryptor>(textEncryptor);
        (...)
    }
}
public class ServiceBase : IBusinessService
{
    public ServiceBase();
    public ServiceBase(Dictionary<Type, object> dependencies);
    protected IAppContext ApplicationContext { get; }
    protected void RegisterService<T>(T dependency) where T : class;
}

И класс ServiceProvider выглядит следующим образом:

public class ServiceProvider<T> where T : class
{
    public ServiceProvider();

    public static T Service { get; }
}

класс SIntegrationService имеет толькоодин конструктор (без конструктора без параметров). Обе программы имеют ссылки SimpleInjector.

Я довольно новичок в DI, поэтому, может быть, я упускаю что-то очевидное, может быть, я должен положить что-то в файл конфигурации, чтобы сообщить, что будет включен DI? Я знаю, что это должно работать таким образом, потому что я смотрю на код в другом проекте, который работает нормально.

В других конфигурациях проекта у меня также есть эта строка:

<Services
  AutoWire="false"
  IocContainer="V.Common.Ioc.SimpleInjector.SimpleInjectorContainerAdapter, V.Common.Ioc.SimpleInjector"/>

Может быть, это решение?

Ниже приведено подробное описание ошибки:

System.MissingMethodException HResult = 0x80131513
Сообщение = Не определен конструктор без параметров для этого объекта.
Исходная строка "mscorlib"
StackTrace "в System.RuntimeTypeHandle.CreateInstance (тип RuntimeType>, тип Boolele, Boolele Boolele NoNely, BooleancanBeCached,> RuntimeMethodHandleInternal & ctor, Boolean & bNeedSecurityCheck) \ r \ n
в System.RuntimeType.CreateInstanceSlow (логическое значение publicOnly, логическое значение skipCheckThis, логическое значение fillCache, стек BoockEntClayMateCoreCatelMateClayRateClayRateCatel). skipCheckThis, Boolean fillCache, StackCrawlMark & ​​stackMark) \ r \ n в System.Activator.CreateInstance (Тип тип, логический nonPublic) \ r \ n в System.Activator.CreateInstance (Тип тип) \ r \ n
в V.Common.Services.ServiceProvider`1.get_Service () \ r \ n в BusinessServices. SIntegration.SIntegrationService.ChangeClaimHandler (сообщение SChangeClaimHandlerMessageDTO) в D: \ TFS1 \ Branches \ Release 1.2.1 Env01 \ ZV \ BusinessServices.SIntegration \ SOrderService.svc.cs: строка 31 \ r \ n в объекте SyncInvoimChanler (SyncInvokeChange)Object []) \ r \ n в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (Экземпляр объекта, входы Object [], Object [] & output) \ r \ n в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & rpc) "строка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...