Có cách nào để giải quyết vấn đề này với Unity 3 ???Unity 3 và Error "Không thể giải quyết tên hoặc bí danh" xxxxx ". Vui lòng kiểm tra tệp cấu hình của bạn và xác minh tên loại này."
Tôi đã thực hiện tất cả những gì có thể để bỏ qua lỗi tin nhắn này, nhưng tôi không thể giải quyết ... Tôi là 2 ngày cố gắng giải quyết, và đã làm tất cả mọi thứ tôi đã nhìn thấy trong tìm kiếm googles.
Tôi gần như đã từ bỏ và thử một giải pháp DI khác. Xin vui lòng, bất kỳ sự giúp đỡ sẽ ổn thôi ...
tập tin cấu hình của tôi:
<?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>
giao diện của tôi:
using Biblioteca.Transport;
using System.Linq;
namespace Biblioteca.Contracts
{
public interface IManterCategoriaBO
{
IQueryable<CategoriaDTO> GetAll();
CategoriaDTO GetById(int id);
void Insert(CategoriaDTO dto);
}
}
lớp bê tông của tôi:
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 lớp:
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 dự án phụ thuộc tĩnh lớp:
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>();
}
}
}
UI mô hình tập tin của tôi lớp về dự án MVC 4. Tôi đang sử dụng khung 4.5.
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);
}
}
}
}
Tôi nghĩ mọi thứ đều đúng. Nhưng, tôi không thể thấy công trình DI này khiến tôi gặp lỗi trong quá trình lập bản đồ, bên dưới lớp Bootstrapper của tôi, phương thức BuildUnityContainer:
var container = new UnityContainer(). LoadConfiguration (unitySection);
Lỗi này là:
Tên loại hoặc bí danh Biblioteca.Contracts.IManterCategoriaBO thể không được giải quyết. Vui lòng kiểm tra tệp cấu hình của bạn và xác minh tên này .
Tôi đã kiểm tra kỹ tất cả các lớp học của mình và cho tôi, chúng ổn. Hay là nó thiếu cái gì?
tôi cần sự giúp đỡ, vì tôi có một thời gian ngắn để chăm sóc này ....
Kính trọng, Marcelo.
Hội đồng của bạn có được đặt tên mạnh không? Tôi đã tìm thấy rằng đôi khi tôi phải sử dụng một tên đầy đủ loại (với khóa công khai) để có được nó để tải thông qua cấu hình Unity. Ngay cả với các assembly không mạnh, tôi đã phải thêm phần assembly vào tên kiểu. –