gpt4 book ai didi

c# - Unity 3 和错误 "The type name or alias "xxxxx“无法解析。请检查您的配置文件并验证此类型名称。”

转载 作者:太空狗 更新时间:2023-10-29 18:07:24 27 4
gpt4 key购买 nike

Unity 3 有什么办法可以解决这个问题吗?

我已尽一切可能绕过此消息错误,但我无法解决;我已经完成了我在谷歌搜索中看到的所有内容。

我几乎要放弃并尝试另一种 DI 解决方案。

我的配置文件:

<?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>

我的界面:

using Biblioteca.Transport;
using System.Linq;

namespace Biblioteca.Contracts
{
public interface IManterCategoriaBO
{
IQueryable<CategoriaDTO> GetAll();
CategoriaDTO GetById(int id);
void Insert(CategoriaDTO dto);
}
}

我的具体类:

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();
}
}
}

我的 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();
}
}
}

我的 Bootstrap 类:

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;
}
}
}

我的依赖项目静态类:

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>();
}
}
}

我在 MVC 4 项目上的 UI 模型类文件。我正在使用 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);
}
}
}
}

我认为一切都在正确的道路上。但是,我看不到这个 DI 工作,因为我在映射过程中遇到错误,在我的 Bootstrapper 类的下面一行中,BuildUnityContainer 方法:

var container = new UnityContainer().LoadConfiguration(unitySection);

错误是:

The type name or alias Biblioteca.Contracts.IManterCategoriaBO could not be resolved. Please check your configuration file and verify this type name.

我仔细检查了我所有的类(class),对我来说,它们没问题。还是遗漏了什么?

最佳答案

问题出在你的配置文件中。您将两个概念与一些不正确的语法混合在一起。

<assembly... /><namespace ... />节点在您的 <register ... /> 时提供程序集和命名空间搜索顺序节点包含无法自行找到的类型。如果找不到类型,它将搜索 [namespace].Type, [assembly] 的所有组合.这是错误所在:它不搜索 Type, [assembly] .如果有<namespace ... />节点已定义,它不会尝试仅附加程序集。

所以你的 <register type="Biblioteca.Contracts.IManterCategoriaBO" mapTo="Biblioteca.Business.ManterCategoriaBO" />节点的类型为 Biblioteca.Contracts.IManterCategoriaBO其中不包含程序集,因此无法找到。因此,它需要进行搜索。您确实指定了 <namespace ... />节点,因此它将首先尝试 Biblioteca.Biblioteca.Contracts.IManterCategoriaBO, Biblioteca .请注意重复的 Biblioteca 名称。

这是一个更正的配置文件。

<?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="IManterCategoriaBO" mapTo="ManterCategoriaBO" />
<!-- Or this works -->
<!--<register type="Biblioteca.Contracts.IManterCategoriaBO, Biblioteca" mapTo="Biblioteca.Business.ManterCategoriaBO, Biblioteca" />-->
</container>
</unity>
</configuration>

关于c# - Unity 3 和错误 "The type name or alias "xxxxx“无法解析。请检查您的配置文件并验证此类型名称。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com