unity 自动注册 ICommandHandler

Unity Auto Register ICommandHandler

怎么样,我有几个 类 多次实现 ICommanHandler <> 接口,因为我可以使用 Unity 自动注册它们,而不是一个一个地注册。谢谢。

public class CarCommandHandler:ICommandHandler<CreateCar>
                               ICommandHandler<DeleteCar>
{
    ......
}


public class EngineCommandHandler:ICommandHandler<CreateEngine>
                                  ICommandHandler<DeleteEngine>
{
    ......
}



public static void RegisterTypes(IUnityContainer container)
{
   container.RegisterType<ICommandHandler<CreateCar>, CarCommandHandler>();

   container.RegisterType<ICommandHandler<DeleteCar>, CarCommandHandler>();

   container.RegisterType<ICommandHandler<CreateEngine>, EngineCommandHandler>();

   container.RegisterType<ICommandHandler<DeleteEngine>, EngineCommandHandler>(); 
}

您需要迭代所有实现 ICommandHandler<> 的类型并注册它们。下面的代码可以做到这一点:

    public static void RegisterAllImplementations(this UnityContainer container, Type openInterfaceType)
    {
        int registerCount = 0;
        // Iterate all types from current assembly
        foreach (var typeItem in Assembly.GetExecutingAssembly().GetTypes())
        {
            foreach (var interaceItem in typeItem.GetInterfaces())
            {
                if (interaceItem.IsGenericType && interaceItem.GetGenericTypeDefinition() == openInterfaceType)
                {
                    container.RegisterType(interaceItem, typeItem, $"{registerCount++}");
                }
            }
        }
    }

一个调用:

    var container = new UnityContainer();
    container.RegisterAllImplementations(typeof(ICommandHandler<>));

如果有问题请告诉我