向 Unity 注册通用处理程序接口



我已经查看了有关在 Unity 中注册通用接口的多个线程,不幸的是,我还没有设法让它们中的任何一个实际工作。这是定义的接口。

public interface IHandler<in TCommand>{}

示例类:

public class MyTestHandler : IHandler<TestCommand>
{}

然后我尝试在工厂中解决它们:

    public IHandler<TCommand> Create<TCommand>()
    {
        return _container.Resolve<IHandler<TCommand>>();
    }

我尝试按如下方式注册我的处理程序:

container.RegisterTypes(AllClasses.FromLoadedAssemblies().Where(type => typeof(IHandler<>).IsAssignableFrom(type)), WithMappings.FromAllInterfaces, WithName.TypeName, WithLifetime.Transient);

不幸的是,除非我明确注册一个具体的处理程序,否则我似乎无法让它工作。任何建议都会很棒。

提前谢谢。

问题是Where条件:IHandler<>不能从MyTestHandler分配,因此您不会获得任何注册。

这对我来说很好用,也就是说,instance收到MyTestHandlerinstance2收到MyTestHandler2

internal class Program
{
    static void Main( string[] args )
    {
        var container = new UnityContainer();
        container.RegisterTypes( AllClasses.FromLoadedAssemblies().Where( type => type.Name.Contains("Handler") ), WithMappings.FromAllInterfaces, WithName.Default, WithLifetime.Transient );
        var instance = container.Resolve<IHandler<TestCommand>>();
        var instance2 = container.Resolve<IHandler<TestCommand2>>();
    }
}
public interface IHandler<TCommand>
{
}
public class MyTestHandler : IHandler<TestCommand>
{
}
public class TestCommand
{
}
public class MyTestHandler2 : IHandler<TestCommand2>
{
}
public class TestCommand2
{
}

最新更新