我已经查看了有关在 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
收到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
{
}