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

时间:2017-04-03 21:35:18

标签: c# generics unity-container

我已经看过关于在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);

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题是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
{
}