这是关于我的另一篇关于Unity的帖子(http://stackoverflow.com/questions/3998559/irepository-iservice-unity-in-an-asp-net-mvc-application-reference-question) 。基本上我正在尝试在web.config中注册泛型类型。我已经阅读了一些帖子,这个SEEMS就像它配置正确一样。
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="IService" type="Porject.Service.IService`1, Porject.Service" />
<alias alias="PropertyService" type="Porject.Service.PropertyService, Porject.Service"/>
<container>
<register type="IService[Property]" mapTo="PropertyService" />
</container>
</unity>
但是我收到了这个错误:
2>'/'应用程序中的服务器错误。无法解析类型名称或别名IService [Property]。请检查配置文件并验证此类型名称。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:无法解析类型名称或别名IService [Property]。请检查您的配置文件并验证此类型名称。
来源错误:
第33行: 第34行:UnityConfigurationSection部分=(UnityConfigurationSection)ConfigurationManager.GetSection(“unity”); 第35行:section.Configure(_container); 第36行: 第37行:
源文件:D:\ Projects \ Ex2 \ NCI \ TREB \ src \ WebUI \ UnityControllerFactory.cs行:35
答案 0 :(得分:2)
我认为你需要在声明别名时指定哪种类型是通用的。 我已经完成了How to inject a generic IList<> of objects using Unity 2 XML config?的示例,如下所示。
列表假设您要使用“IList”中的“解析”到“列表”。
1 首先,您必须准备配置文件,在这种情况下,它使用对IList和List的签名引用。
<?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">
<alias alias="StringListContract" type="System.Collections.Generic.IList`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<alias alias="ConcreteStringList" type="System.Collections.Generic.List`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<container>
<register type="StringListContract" mapTo="ConcreteStringList">
<lifetime type="ContainerControlledLifetimeManager" />
<constructor />
</register>
</container>
</unity>
</configuration>
<强> 2 强> 使用容器来解决依赖关系; - )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
namespace UnityTerminal
{
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.LoadConfiguration();
{
var concreteStringList = container.Resolve<System.Collections.Generic.IList<System.String>>();
concreteStringList.Add("Hello World");
}
{
var concreteStringList = container.Resolve<System.Collections.Generic.IList<System.String>>();
Console.WriteLine("{0}", concreteStringList[0]);
}
Console.ReadKey();
}
}
}
那应该够了,我希望这个有用;-) 最好的祝福, 数量锐减
答案 1 :(得分:0)
类型属性没有别名或命名空间/程序集快捷方式。这种类型在哪里定义?修复它,它应该工作。
答案 2 :(得分:0)
配置文件应由人类阅读,因此不会让您的生活变得困难。 以下行很难维护
<alias alias="IService" type="Porject.Service.IService`1, Porject.Service" />