【问题标题】:Can't resolve types from unity config file无法从统一配置文件解析类型
【发布时间】:2011-12-10 04:29:08
【问题描述】:

尝试通过 XML 配置设置 Unity 我遇到了这个异常

The type name or alias ServiceHost could not be resolved. Please check your configuration file and verify this type name.

试图注释掉我在下一个和下一个之后得到相同的异常,所以问题一定出在我的设置中。

<unity>
    <typeAliases>

      <!-- Lifetime manager types -->
      <typeAlias alias="singleton"
           type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
             Microsoft.Practices.Unity" />
      <typeAlias alias="external"
           type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,
             Microsoft.Practices.Unity" />
      <typeAlias alias="perThread"
           type="Microsoft.Practices.Unity.PerThreadLifetimeManager,
             Microsoft.Practices.Unity" />

      <!-- User-defined type aliases -->
      <typeAlias alias="ServiceHost"
                 type="System.ServiceModel.ServiceHost, System.ServiceModel" />
      <typeAlias alias="UnityServiceHost"
                 type="MyProjectServiceLibrary.Hosting.UnityServiceHost" />

      <typeAlias alias="IServiceBehavior"
                 type="System.ServiceModel.Descriptions.IServiceBehavior, System.ServiceModel" />
      <typeAlias alias="UnityServiceBehavior"
                 type="MyProjectServiceLibrary.Hosting.UnityServiceBehavior, MyProjectServiceLibrary" />

      <typeAlias alias="IInstanceProvider"
                 type="System.ServiceModel.Dispatcher.IInstanceProvider, System.ServiceModel" />
      <typeAlias alias="UnityInstanceProvider"
                 type="MyProjectServiceLibrary.Hosting.UnityInstanceProvider, MyProjectServiceLibrary" />

      <typeAlias alias="MyProjectService"
                 type="MyProjectServiceLibrary.Service.MyProjectService, MyProjectServiceLibrary" />

      <typeAlias alias="IRepositoryFactory"
                 type="MyProjectDataModelLibrary.Repository.IRepositoryFactory, MyProjectDataModelLibrary" />
      <typeAlias alias="RepositoryFactory"
                 type="MyProjectDataModelLibrary.Repository.RepositoryFactory, MyProjectDataModelLibrary" />

      <typeAlias alias="IDbContext"
                 type="MyProjectDataModelLibrary.DataContext.IDbContext, MyProjectDataModelLibrary" />
      <typeAlias alias="MyProjectDatabase"
                 type="MyProjectDataModelLibrary.DataContext.MyProjectDatabase, MyProjectDataModelLibrary" />

      <typeAlias alias="IRepositoryOfT"
                 type="MyProjectDataModelLibrary.Repository.IRepository`1, MyProjectDataModelLibrary" />
      <typeAlias alias="EntityRepositoryOfT"
                 type="MyProjectDataModelLibrary.Repository.EntityRepository`1, MyProjectDataModelLibrary" />

    </typeAliases>

    <containers>

      <container>
        <types>

          <type type="MyProjectService" />

          <type type="ServiceHost"
                mapTo="UnityServiceHost" />

          <type type="IServiceBehavior"
                mapTo="UnityServiceBehavior" />

          <type type="IInstanceProvider"
                mapTo="UnityInstanceProvider" />

          <type type="IRepositoryFactory"
                mapTo="RepositoryFactory" />

          <type type="IDbContext"
                mapTo="MyProjectDatabase" />

          <type type="IRepositoryOfT"
                mapTo="EntityRepositoryOfT" />

        </types>
      </container>

    </containers>
  </unity>

我试着四处阅读,看看我做错了什么。我怀疑它是完全限定的名称,但我不能确定,因为我以前没有真正使用过。

IUnityContainer container = new UnityContainer();
container.RegisterInstance<IUnityContainer>(container);
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container);

这里最后一行抛出异常。

【问题讨论】:

  • 您使用的是哪个版本的 Unity?看起来像 1.2,但只是想验证一下。
  • 类型缺少程序集名称
  • 感谢您指出这一点。但这似乎不是问题,因为他对每种类型都抛出异常。
  • 那么您将不得不以艰难的方式解决这个问题:删除除一个映射之外的所有映射,使该映射起作用,再添加一个映射,重复。对于没有代码帮助的人来说,你有太多的“MyProject”映射。

标签: configuration web-config unity-container app-config


【解决方案1】:

由于您引用的是系统类型,因此很可能会尝试从 GAC 中提取这些类型。在这种情况下,您需要使用完全限定的程序集名称,包括版本号、文化和公钥标记。像这样的:

<typeAlias alias="ServiceHost"
  type="System.ServiceModel.ServiceHost, System.ServiceModel,
  Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, 
  processorArchitecture=MSIL" />

当然,您需要为您正在使用的 .NET 版本查找适当的版本号和公钥标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2019-05-10
    相关资源
    最近更新 更多