Как решить тип безопасной коллекции в конструкторе? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть структура этого объекта

public interface IHandler<in TMessage>
{
    void HandleMessage(TMessage messageType);
}

public class MessageType1
{
}

public class MessageType2
{
}

public class HandlerMessageType1 : IHandler<MessageType1>
{
    public void HandleMessage(T messageType)
    {
    }
}

public class HandlerMessageType2 : IHandler<MessageType2>
{
    public void HandleMessage(T messageType)
    {
    }
}

и регистрация

container.Collection.Register(typeof(IHandler<>), new[]
        {
            typeof(HandlerMessageType1),
            typeof(HandlerMessageType2)
        });

как должен выглядеть конструктор класса, в который это вводится?

  public class ClientClass
  {
     public ClientClass(IEnumerable<IHandler<>> handlers)
     {
     }
  }

как будто это не работает ... как должна выглядеть подпись конструктора класса клиента?

это было отредактировано для улучшения примера.

tkx заранее

Пауло Абоим Пинто

1 Ответ

0 голосов
/ 22 сентября 2018

Я знаю, если я понял, но с единством вы можете иметь:

public class Handler1 : IHandler
{
    public void HandlerType()
    {
        Console.WriteLine("Handler1");
   }
}

public class Handler2 : IHandler
    {
        public void HandlerType()
        {
            Console.WriteLine("Handler2");
        }
    }

public interface IHandler
    {
        void HandlerType();
    }

Конфигурация Unity

public static class DependencyConfiguration

{
    public static UnityContainer Config()
    {
        var unity = new UnityContainer();
        unity.RegisterType<IHandler, Handler1>("Handler1");
        unity.RegisterType<IHandler, Handler2>("Handler2");
        unity.RegisterType<IEnumerable<IHandler>>();


        return unity;
    }
}

Класс для разрешения:

public class ListOfTypes
    {
        private List<IHandler> handlers;
        public ListOfTypes(IEnumerable<IHandler> handlers)
        {
            this.handlers = handlers.ToList();
        }

        public void PrintHandlers()
        {
            handlers.ForEach(_ => _.HandlerType());
        }

    }

Программа:

 static void Main(string[] args)
        {
            Console.WriteLine("Resolve sample");
            var unity = DependencyConfiguration.Config();
            var lstOfTypes = unity.Resolve<ListOfTypes>();

            lstOfTypes.PrintHandlers();

            Console.ReadLine();
        }

Результат:

enter image description here

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