2013-02-18 145 views
3

试图单元使用起订量统一测试我的应用程序,而我得到的错误在我的 服务是一个接口,并且不能得到解决:类型名称无法解析。请检查配置文件

错误消息:

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. 

错误堆栈跟踪:

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 

配置文件:

<?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> 

用法:

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); 
     } 

回答

10

溶液变成出要附加的组件的名称到 mapTo值的末尾。配置文件更新如上,以反映这一点。

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

+2

我的问题是由于我在一个错误的命名空间中声明接口引起的。所以注意你的命名空间! – Gezim 2013-06-05 17:15:51

0

另外,如果您正在使用单独的dll的注入代码,确保目标架构是相同的,并且包含注入类的dll(一个或多个)复制到运行(调试)文件夹

相关问题