我已经看过关于在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);
不幸的是,除非我明确注册一个具体的处理程序,否则我似乎无法让它工作。任何建议都会很棒。
提前致谢。
答案 0 :(得分:0)
问题是Where
条件:IHandler<>
无法从MyTestHandler
分配,因此您无法注册。
这适用于我,即instance
收到MyTestHandler
而instance2
收到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
{
}