【问题标题】:Issue with resolving object based on specific type in Unity container基于 Unity 容器中的特定类型解析对象的问题
【发布时间】:2019-04-30 07:51:00
【问题描述】:

我正在尝试根据 stringint 来解析使用 Unity 容器在对象中接收到的类型,我将在此对象中接收这些类型。这样我就可以根据类型实现逻辑。以下是我尝试在 Unity 中注册的内容,但在 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));

【问题讨论】:

  • 请添加异常消息和 Unity 抛出的堆栈跟踪,并更清楚地说明您要解决的问题是什么。就目前而言,不清楚你在问什么。
  • 出现此编译时错误 - “无法从 'System.Type' 转换为“Microsoft.Practices.Unity.InjectionMember”
  • 正如我在上面提到的,我将在对象中接收字符串或 int 类型。这里我试图通过在统一容器中设置该类型来添加解析器,以便在运行时获得这个对象它包含字符串或整数,我将调用 IActionResolver 的此 resolve() 方法,该方法将执行 StringResolver 或 IntResolver。希望我没有混淆

标签: c# .net dependency-injection unity-container


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2013-02-16
    • 2011-05-14
    • 1970-01-01
    • 2018-04-17
    相关资源
    最近更新 更多