2011-10-04 10 views
9

tengo el siguiente método de la unidad construcción:Unidad loadConfiguration no

public static IUnityContainer CreateContainer() 
{ 
    UnityContainer container = new UnityContainer(); 
    container.LoadConfiguration(); 

    ....... 
} 

A continuación, una interfaz y una clase de implementación:

namespace MyCompany.Web.Areas.MyApp.Common 
{ 
    public interface ISession 
    { 
    } 
} 

namespace MyCompany.Web.Areas.MyApp.Common 
{ 
    public class SessionHandler : ISession 
    { 
    } 
} 

lugar de hacer esto:

Container.RegisterType<ISession, SessionHandler>(new ContainerControlledLifetimeManager()) ; 

I desea utilizar container.LoadConfiguration() para cargar la configuración de RegisterType anterior desde el web.config. pero no parece funcionar

web.config:

<unity> 
    <containers> 
     <container> 
     <types> 

      <type type="MyCompany.Web.Areas.MyApp.Common.ISession" mapTo="MyCompany.Web.Areas.MyApp.Common.SessionHandler"> 
      <lifetime type="singleton"/> 
      </type> 
     </types> 
     </container> 
    </containers> 
    </unity> 

Excepción:

El nombre del tipo o MyProject.Web.Areas.MyApp.Common.ISession alias podía no ser resuelto Por favor verifique su archivo de configuración y verifique el nombre de este tipo.

Descripción: Ocurrió una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de excepciones: System.InvalidOperationException: El nombre del tipo o MyProject.Web.Areas.MyApp.Common.ISession alias no se podían resolver. Por favor verifique su archivo de configuración y verifique el nombre de este tipo.

Fuente Error:

Línea 33: { Línea 34: recipiente UnityContainer = new UnityContainer(); Línea 35: container.LoadConfiguration(); Línea 36: Línea 37: //container.RegisterType(new ContainerControlledLifetimeManager());

Seguimiento de la pila:

[InvalidOperationException: The type name or alias MyProject.Web.Areas.MyApp.Common.ISession 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:110 Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolver.ResolveType(String typeNameOrAlias) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ConfigurationHelpers\TypeResolver.cs:47 Microsoft.Practices.Unity.Configuration.RegisterElement.GetRegisteringType() in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\RegisterElement.cs:121 Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\RegisterElement.cs:88 Microsoft.Practices.Unity.Configuration.ContainerConfiguringElement.ConfigureContainerInternal(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ContainerConfiguringElement.cs:43 Microsoft.Practices.Unity.Configuration.<>c__DisplayClass1.b__0(ContainerConfiguringElement element) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ContainerElement.cs:114 Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach(IEnumerable 1 sequence, Action 1 action) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity\Src\ObjectBuilder\Utility\EnumerableExtensions.cs:36 Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\ContainerElement.cs:110 Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer container, String configuredContainerName) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\UnityConfigurationSection.cs: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:37 Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container) in e:\Builds\Unity\UnityTemp\Compile\Unity\Unity.Configuration\Src\UnityContainerExtensions.cs:64 MyProject.Web.ApplicationContainer.CreateContainer() in C:\Workspace\MCDev\MyApp\MyApp\MyProject.Web\ApplicationContainer.cs:35 MyProject.Web.ApplicationContainer.Initialize(HttpContext context) in C:\Workspace\MCDev\MyApp\MyApp\MyProject.Web\ApplicationContainer.cs:53 MyProject.Web.MvcApplication.Application_Start() in C:\Workspace\MCDev\MyApp\MyApp\MyProject.Web\Global.asax.cs:41

Respuesta

10

No creo que sabe lo DLL que debe buscar en:

<unity> 
    <containers> 
     <container> 
     <types> 
      <type type="MyCompany.Web.Areas.MyApp.Common.ISession, MyCompany" mapTo="MyCompany.Web.Areas.MyApp.Common.SessionHandler, MyCompany"> 
      <lifetime type="singleton"/> 
      </type> 
     </types> 
     </container> 
    </containers> 
    </unity> 
+1

que tener en cuenta, lo que requiere el nombre de ensamblado es exactamente cómo las operaciones de búsqueda por su nombre en .NET funciona (http://msdn.microsoft.com/en-us/library/w3f99sx1%28v=vs.110%29.aspx) si usa Unity o no. –

Cuestiones relacionadas