首页 > 解决方案 > 基于 Unity 容器中的特定类型解析对象的问题

问题描述

我正在尝试使用 Unity 容器解析在对象中接收的类型,基于stringint我将在该对象中接收的类型。这样我就可以根据类型实现逻辑。下面是我尝试在 Unity 中注册的内容,但是 typeof()在 Unity 容器中使用时,我收到一个错误,指出我无法注册它。

无论如何我可以使用统一来做到这一点吗?

public interface IActionResolver
{
    void Resolve(object item);
}

public class StringResolver : IActionResolver
{
    public void Resolve(object item)
    {
    }
}

public class IntResolver : IActionResolver
{
    public void Resolve(object item)
    {
    }
}

在 Unity 中,我尝试像这样注册..

unityContainer.RegisterType<IActionResolver, StringResolver>(typeof(string));
unityContainer.RegisterType<IActionResolver, IntResolver>(typeof(int));

标签: c#.netdependency-injectionunity-container

解决方案


您想命名您的注册(使用字符串作为名称,而不是类型):

unityContainer.RegisterType<IActionResolver, IntResolver>(typeof(int).FullName);

IActionResolver GetResolver( object x )
{
    return unityContainer.Resolve<IActionResolver>( x.GetType().FullName );
}

推荐阅读