从Unity容器2.0迁移到Unity容器5

3

我的应用程序使用Unity Container v2进行依赖注入。现在我正在使用NUGET包将其迁移到5+,但是我在类解析方面遇到了问题。

var searchClient = IocContainer.Resolve<DocumentSearch>();

给我的提示是:

The non-generic method 'IUnityContainer.Resolve(Type, string, params ResolverOverride[])' cannot be used with type arguments App.Super.Web.App D:\Repo\git1601\App.Super.Web.App\API\ApiControllers\DocumentsController.cs

我已经将从 Microsoft.Practices.Unity 导入的内容改为只有 Unity,因为软件包发生了变化,但它仍然无法工作。 有任何想法吗?


1
你最近解决了这个问题吗?我最近从4迁移到5,也遇到了同样的问题。 - DDiVita
1个回答

3

这适用于从NuGet下载的最新版Unity(5.3.2)

using Unity;

namespace ConsoleApplication1
{
    public class Foo
    {
    }

    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();
            var f = container.Resolve<Foo>();
        }
    }
}

请注意,Resolve<T>是一个扩展方法,虽然它定义在同一个命名空间(Unity)中,但您的编译器必须支持扩展方法。
您是否使用非常旧的C#2编译器进行编译,其中不支持扩展方法?
另一个可能的原因是您的引用列表中没有Unity.Abstractions。请注意,虽然UnityContainer类型定义在Unity.Container程序集中,但扩展方法定义在其他程序集中(从NuGet安装会同时安装两个程序集)。
请确保在调用扩展方法的项目中引用了这两个程序集。

就是这样了。谢谢Wik =) - Gabriel Slomka
实际上,我之前的说法有误导性。我仍然遇到这个问题 :( 顺便说一下,我没有使用旧编译器,并且我在引用中有“Unity.Abstractions”(我正在使用完整的库NuGet包)。 - Gabriel Slomka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接