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<>));
如果有问题请告诉我
怎么样,我有几个 类 多次实现 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<>));
如果有问题请告诉我