首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析类型名称。请检查配置文件

无法解析类型名称。请检查配置文件
EN

Stack Overflow用户
提问于 2013-02-18 19:51:41
回答 2查看 10.6K关注 0票数 3

尝试使用moq和unity对我的应用程序进行单元测试时,我遇到了错误,因为我的服务是一个接口,无法解决:

错误消息:

代码语言:javascript
复制
    Test method Ecommerce_Test.Tests.LoginSuccessfulRedirectToActionLoad threw exception: 
System.InvalidOperationException: The type name or alias Ecommerce_Test.AuthenticationMock could not be resolved. Please check your configuration file and verify this type name.

错误堆栈跟踪:

代码语言:javascript
复制
    Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(String typeNameOrAlias, Boolean throwIfResolveFails) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ConfigurationHelpers\TypeResolverImpl.cs: line 110
Microsoft.Practices.Unity.Configuration.RegisterElement.GetMappedType() in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\RegisterElement.cs: line 128
Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\RegisterElement.cs: line 0
Microsoft.Practices.Unity.Configuration.ContainerElement.<>c__DisplayClass1.<ConfigureContainer>b__0(ContainerConfiguringElement element) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ContainerElement.cs: line 114
Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach[TItem](IEnumerable`1 sequence, Action`1 action) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity\Src\ObjectBuilder\Utility\EnumerableExtensions.cs: line 36
Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ContainerElement.cs: line 110
Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer container, String configuredContainerName) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\UnityConfigurationSection.cs: line 151
Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container, UnityConfigurationSection section, String containerName) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\UnityContainerExtensions.cs: line 35
Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\UnityContainerExtensions.cs: line 63
Ecommerce.Controllers.HomeController.Login(LoginModel model) in C:\Users\avmin!\Documents\Visual Studio 2010\Projects\Ecommerce_Mock\Ecommerce\Controllers\HomeController.cs: line 45
Ecommerce_Test.Tests.LoginSuccessfulRedirectToActionLoad() in C:\Users\avmin!\Documents\Visual Studio 2010\Projects\Ecommerce_Mock\Ecommerce_Test\Tests.cs: line 80

配置文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">

    <assembly  name="Ecommerce"/>
    <assembly  name="Ecommerce_Tests"/>

    <container>
      <register type="Ecommerce.Authentication.IAuthentication"
                mapTo="Ecommerce_Test.AuthenticationMock, Ecommerce_Test" />
    </container>
  </unity>
  <system.serviceModel>
      <bindings />
      <client />
  </system.serviceModel>
</configuration>

用法:

代码语言:javascript
复制
public ActionResult Login(HomeModels.LoginModel model)
        {
            var unity = new UnityContainer().LoadConfiguration(); //error fired here!!!
            var proxy = unity.Resolve<IAuthentication>();


            if (ModelState.IsValid)
            {
                try
                {
                    Login log = new Login();
                    log.Username = model.Username;
                    log.Password = model.Password;
                    int result = proxy.Login(new Login { Username = log.Username, Password = log.Password });

                }
                catch (MemberAccessException e)
                {
                    ModelState.AddModelError("Login was not successful", e);
                }
            }
            return View("Login",model);
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-18 23:58:43

结果,解决方案是将程序集的名称附加到mapTo值的末尾。上面的配置文件进行了更新以反映这一点。

通过右键单击Ecommerce_Tests project > Properties找到的程序集名称。

票数 10
EN

Stack Overflow用户

发布于 2017-09-12 21:00:52

此外,如果对注入的代码使用单独的dll,请确保目标框架相同,并且将包含注入类的dll复制到run (debug)文件夹中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14935645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档