webapi unity registertype mvc injection dependency container c# asp.net unity-container

c# - registertype - unity webapi



El tipo ''IUnityContainer'' está definido en un ensamblaje al que no se hace referencia (8)

Acabo de actualizar mi proyecto ASP.NET MVC / WebApi de Microsoft.Practices.Unity 3.5.1404 a 3.5.1406 (a través de nuget, recién lanzado). Después, estoy recibiendo este error de compilación:

Error CS0012 El tipo ''IUnityContainer'' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ''Microsoft.Practices.Unity, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35''.

En líneas como:

GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

Por supuesto, no estoy haciendo referencia a 3.0.0.0, sino a 3.5.1.0. Así que mi suposición es que el ensamblaje Unity.WebApi se ha compilado contra una versión anterior del ensamblaje Microsoft.Practices.Unity . Teóricamente, usted querría arreglar eso con un redireccionamiento de ensamblajes, así:

<dependentAssembly> <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.5.1.0" newVersion="3.5.1.0" /> </dependentAssembly>

Sin embargo, eso no parece funcionar.

¿Alguna sugerencia?


Acabo de localizar el último lanzamiento de Unity Container que fue Unity 3 en abril de 2013 y lo agregué a mis referencias. Aquí hay un enlace a un PDF en mi Google Drive que detalla todos los pasos que tomé.


Bueno, esto probablemente sea superfluo ahora, pero el problema aparentemente tuvo algo que ver con la Unidad 3.5.1406, ya que se eliminó y se reemplazó con la Unidad 4.0. También reemplacé la biblioteca Unity.WebApi más antigua, aparentemente no compatible que no se ha actualizado en varios años, y la reemplacé con la biblioteca Unity.AspNet.WebApi más nueva y aparentemente compatible. Eso es un poco complicado en NuGet, ya que la búsqueda de "Unity WebApi" devuelve la biblioteca anterior en la parte superior de la lista y oculta la biblioteca más reciente en la parte inferior de la primera página.

Entre todo eso, funciona ahora, sin ningún problema que haya descubierto.


Debe asegurarse de que también actualiza a Unity.AspNet.WebApi versión 3.5.1406, no solo a Unity. Si haces esto, el error debería desaparecer.


Error 1 El tipo ''Microsoft.Practices.Unity.IUnityContainer'' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ''Microsoft.Practices.Unity, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35''.

RESPUESTA: Solo para este error, solo ABRIR-> Consola de Package Manager y escriba

PM> paquete de actualización


Esta podría ser una respuesta más actualizada sobre cómo actualizar de Unity 3.5.1 a 4.0.1.

El tipo ''IUnityContainer'' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ''Microsoft.Practices.Unity, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35''.

Ya sea a través de la consola de Package Manager o NuGet:

  • Desinstalar Unity.Mvc4
  • Desinstalar Unity.WebAPI
  • Unidad de actualización de paquetes
  • Install-Package Unity.Mvc (nota: no hay número en el nombre del paquete esta vez)
  • Paquete de instalación Unity.AspNet.WebApi

Código:

  • Container.RegisterTypes copiado de Bootstrapper.cs a App_Start / UnityConfig.cs
  • Excluir Bootstrapper.cs del proyecto
  • Construir y ejecutar

Golpeé esto cuando ejecuté un update-package global.

install-package Unity -version 3.5.1404 la versión Unity a través install-package Unity -version 3.5.1404 resolvió.


Tuve el mismo problema esta mañana, terminé desinstalando v4.0 de Unity junto con Unity.WebAPI. Se instaló v3.5.1405-prelease de Unity y luego se reinstaló Unity.WebAPI.


Una razón para que el redireccionamiento del ensamblaje no funcione podría ser un cambio en Microsoft.Practices.Unity PublicKeyToken. He leído que entre Unity.3.5.1404.0 y Unity.4.0.0, PublicKeyToken cambió de 31bf3856ad364e35 a 6d32ff45e0ccc69f . Tal vez ya fue cambiado por 3.5.1406? Consulte: https://github.com/unitycontainer/unity/issues/15