none
No se puede cargar el archivo o ensamblado 'Microsoft.Practices.Unity.Configuration RRS feed

  • Pregunta

  • IUnityContainer unity = new UnityContainer();
    			unity.LoadConfiguration();


    Hola estoy creando una aplicación de ejemplo de Inyección de dependencias e inversión de control utilizando Unity

    es una simple aplicación Windows form con un botón

    Como pueden ver es un proyecto Windows form con dos carpetas una que se llama clases y una que se llama interface

    esta es la interface

    namespace UnityExampleOne.Interface
    {
    	public interface ICrud
    	{
    		string Guardar(string name);
    		string Borrar();
    
    	}
    }

    y esta es la clase que implementa la interface

    namespace UnityExampleOne.Clases
    {
    	public class Crud : ICrud
    	{
    		public string Borrar()
    		{
    			string respuesta = "si se borro";
    			return respuesta;
    		}
    
    		public string Guardar(string name)
    		{
    			string otroname = name;
    			return otroname;
    		}
    	}
    }

    y esta es una clase que por nombre es llamada, es quien llama a la función de ICrud y la usa la inyección de dependencias

    namespace UnityExampleOne
    {
    	public class LLamada
    	{
    		private ICrud iCrud;
    
    		public LLamada(Interface.ICrud iCrud)
    		{
    			this.iCrud = iCrud;
    		}
    
    		public string insertar(string obj)
    		{
    			return this.iCrud.Guardar(obj);
    		}
    
    		public string borrar()
    		{
    			return this.iCrud.Borrar();
    		}
    	}
    }


    y por ultimo un botón en el formulario que crea a llamada y lo usa

    private void button1_Click(object sender, EventArgs e)
    		{
    			IUnityContainer unity = new UnityContainer();
    			unity.LoadConfiguration();
    			//LLamada llamada = new LLamada(iCrud);
    		}

    solo que aquí no llego a ese punto cuando hago el unity.LoadConfiguration() me regresa este error:

    No se puede cargar el archivo o ensamblado 'Microsoft.Practices.Unity.Configuration.7

    ahora les muestro el app.Config

    <?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 ="https://schemas.microsoft.com/practices/2010/unity">
    		<namespace name ="UnityExampleOne"/>
    		<assembly  name="UnityExampleOne"/>
    		<alias alias ="ICrud" type="UnityExampleOne.Interface, Interface"></alias>
    		<alias alias ="Crud" type="UnityExampleOne.Clases, Clases"></alias>
    		<container>
    			<register type ="ICrud" mapTo ="Crud"/>
    		</container>
    		
    	</unity>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
        </startup>
    </configuration>


    primero se crea el Section con el name "unity" y el type con las librerías

    después en el namespace pues pongo el nameSpace del proyecto windowsform

    en Assembly pues es lo mismo que el namespace

    y después los alias que primero llevan un alias después en type pongo en namespace y el nombre de la carpeta

    y después en el container registro el type por su alias y digo que se mapee con el objeto por su alias

    creo que todo Esta bien, aquí les muestro una imagen de las referencias en el proyecto

    entonces cuando llamo al metodo

    IUnityContainer unity = new UnityContainer();
    			unity.LoadConfiguration();


    marca error No se puede cargar el archivo o ensamblado 'Microsoft.Practices.Unity.Configuration

    a olvidaba me genero estos packages

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Unity" version="5.5.4" targetFramework="net461" />
    </packages>

    pero en el app.config no veo que los llame

    Podrían apoyarme con este tema

    De antemano muchas gracias

    lunes, 8 de enero de 2018 18:18

Respuestas

  • hola

    si analizas el nuget de

    https://www.nuget.org/packages/Unity.Configuration/

    veo que es compatible con .net 4.5 y 4.7, pero no dice nada de 4.6

    puede que no este pudiendo cargarlo por la version del framework

    aunque en el <packages> no veo que tengas la linea de nuget relacionada al unity configuration

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 8 de enero de 2018 20:32
  • Ya encontre el error ya funciona.

    bien raro el error estaba en la version de Unity estaba usando la mas nueva la 5.4 y tuve que bajarla hasta la 3.4

    y funciono

    quizas en la version 5.4 se hace de otra forma pero no he encontrado ninguna documentacion diferente

    • Marcado como respuesta niqel miércoles, 10 de enero de 2018 21:03
    miércoles, 10 de enero de 2018 21:03

Todas las respuestas

  • hola

    si analizas el nuget de

    https://www.nuget.org/packages/Unity.Configuration/

    veo que es compatible con .net 4.5 y 4.7, pero no dice nada de 4.6

    puede que no este pudiendo cargarlo por la version del framework

    aunque en el <packages> no veo que tengas la linea de nuget relacionada al unity configuration

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 8 de enero de 2018 20:32
  • El packages lo genero automáticamente

    voy cambiar la version del framework

    como agrego al pakages lo que me comentas

    lunes, 8 de enero de 2018 21:57
  • NO no era la version deberas esa idea me entusiasmo jajaja pero no era eso

    lunes, 8 de enero de 2018 22:09
  • Ya encontre el error ya funciona.

    bien raro el error estaba en la version de Unity estaba usando la mas nueva la 5.4 y tuve que bajarla hasta la 3.4

    y funciono

    quizas en la version 5.4 se hace de otra forma pero no he encontrado ninguna documentacion diferente

    • Marcado como respuesta niqel miércoles, 10 de enero de 2018 21:03
    miércoles, 10 de enero de 2018 21:03
  • Estimados,

    Luego de 12 hs me cansé con Unity  y las dll que no funcionan, web.config que no encuentra etcetc.

    Les paso la solución con Castle Windsor (simple);

    <package id="Castle.Core" version="4.2.0" targetFramework="net45" />

    <package id="Castle.Windsor" version="4.1.0" targetFramework="net45" />

    Luego, en App.config:

     <configSections>
          <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" >
          </section>
        </configSections>      
        <castle>
          <components>
            <component id="implementacion"  service="DAL.IConnectionService, DAL" type="DAL.ConectarXML, DAL">          
          </component>
        </components>
      </castle>  

    DAL = Namespace

    y por último:

    using (IResource castleConfig = new ConfigResource("castle"))
                {
                    
                    var container = new WindsorContainer(new XmlInterpreter(castleConfig));

                    Access service = new Access(container.Resolve<IConnectionService>("implementacion"));

                    Console.WriteLine(service.GetData());

                }

    Factory:

    namespace DAL
    {

        public class Access
        {
            private readonly IConnectionService _conservice;

            public Access(IConnectionService connection)
            {
                _conservice = connection;
            }

            public string GetData()
            {
                return _conservice.GetData();
            }

        }

        public class ConectarSqlSever : IConnectionService
        {
            public string GetData()
            {
                return "a";
            }
        }

        public class ConectarXML : IConnectionService
        {
            public string GetData()
            {
                return "b";
            }
        }
    }

    A no renegar más!


    • Propuesto como respuesta TK90 jueves, 8 de marzo de 2018 19:17
    jueves, 8 de marzo de 2018 19:00