Is there any way to resolve this problem with Unity 3 ?
I have made all that is possible to bypass this message error, but I can't resolve; I have already did everything I've seen in googles searches.
I am almost giving up and trying another DI solution.
My configuration file:
<?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="Biblioteca" /> <assembly name="Biblioteca.Contracts" /> <assembly name="Biblioteca.Business" /> <namespace name="Biblioteca" /> <namespace name="Biblioteca.Contracts" /> <namespace name="Biblioteca.Business" /> <container> <register type="Biblioteca.Contracts.IManterCategoriaBO" mapTo="Biblioteca.Business.ManterCategoriaBO" /> </container> </unity> </configuration>
My interface:
using Biblioteca.Transport; using System.Linq; namespace Biblioteca.Contracts { public interface IManterCategoriaBO { IQueryable<CategoriaDTO> GetAll(); CategoriaDTO GetById(int id); void Insert(CategoriaDTO dto); } }
My concrete class:
using Biblioteca.Contracts; using Biblioteca.Transport; using Biblioteca.Data; using System; using System.Linq; namespace Biblioteca.Business { public class ManterCategoriaBO : IManterCategoriaBO { public CategoriaDTO GetById(int id) { CategoriaDTO dto = new CategoriaDTO(); ManterCategoriaDO categoriaDO = new ManterCategoriaDO(); dto = categoriaDO.GetById(1); return dto; } public IQueryable<CategoriaDTO> GetAll() { throw new NotImplementedException(); } public void Insert(CategoriaDTO dto) { throw new NotImplementedException(); } } }
My Global.asax:
using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using Biblioteca.Dependency; namespace Biblioteca { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //Below is a static variable to take the unity container //which is on a dependency project Global.Container = Bootstrapper.Initialise(); } } }
My Bootstrapper class:
using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.Configuration; using System.Configuration; using System.Web.Mvc; using Unity.Mvc4; namespace Biblioteca { public static class Bootstrapper { public static IUnityContainer Initialise() { var container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); return container; } private static IUnityContainer BuildUnityContainer() { string path = ConfigurationManager.AppSettings["UnityConfigFilePath"].ToString(); var fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = path + "\\Unity.config" }; System.Configuration.Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); var unitySection = (UnityConfigurationSection)configuration.GetSection("unity"); //*** this line is firing the error !!! **** var container = new UnityContainer().LoadConfiguration(unitySection); return container; } } }
My Dependency project static class:
using Microsoft.Practices.Unity; namespace Biblioteca.Dependency { public static class Global { public static IUnityContainer Container = null; public static T Resolve<T>() { return Container.Resolve<T>(); } } }
My UI model class file on MVC 4 project. I am using 4.5 framework.
using Biblioteca.Contracts; using Biblioteca.Dependency; namespace Biblioteca.Models { public class LivroModel { public void GetAll() { if (Global.Container != null) { var categoriaBO = Global.Resolve<IManterCategoriaBO>(); categoriaBO.GetById(1); } } } }
var container = new UnityContainer().LoadConfiguration(unitySection);
The error is:
The type name or alias Biblioteca.Contracts.IManterCategoriaBO could not be resolved. Please check your configuration file and verify this type name.
I have double checked all my classes and for me, they are ok. Or is it missing anything ?