我在Web API项目中具有以下类/接口
namespace API.Services
{
public class APIService : IAPIService
{
public APIService() { }
}
}
namespace API.Services
{
public interface IAPIService
{
}
}
我正尝试通过Unity配置文件进行解析,如下所示:
<Unity>
<typeAliases>
<typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity"/>
<typeAlias alias="IAPIService" type="API.Services.IAPIService, API.Services"/>
</typeAliases>
<containers>
<container>
<types>
<type
type="IAPIService"
mapTo="API.Services.APIService, API.Services"
>
</type>
</types>
</container>
</containers>
</Unity>
然后我在应用程序中开始从配置文件读取并尝试配置该部分
UnityConfigurationSection section =
(UnityConfigurationSection)config.GetSection("Unity");
section.Configure(container); << error here
这时出现错误System.InvalidOperationException:'无法解析类型名称或别名IAPIService。请检查您的配置文件并验证此类型名称。'
我在做什么错了?
答案 0 :(得分:1)
因此,您混合使用“使用别名”和“不使用别名”。就个人而言,我永远不会这样做。
选项1 :(无别名)
您还需要在界面中加入程序集名称。
下面的通用示例。如果接口和具体对象都在同一程序集“ MyCompany.Apps”(也称为“ MyCompany.Apps.dll”)中,则为
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="MyCompany.Apps.MyInterfaceObject, MyCompany.Apps" mapTo="MyCompany.Apps.MyConcreteObject, MyCompany.Apps" />
</container>
</unity>
选项2 :(始终使用别名)
下面显示了同一程序集“ MyCompany.MyTechnology.MyApplications”(又名“ MyCompany.MyTechnology.MyApplications.dll”)中的界面和具体对象
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<typeAliases>
<typeAlias alias="IMyInterfaceObjectAlias" type="MyCompany.MyTechnology.MyApplications.Interfaces.IMyInterfaceObject, MyCompany.MyTechnology.MyApplications" />
<typeAlias alias="MyConcreteObjectAlias" type="MyCompany.MyTechnology.MyApplications.MyConcreteObject, MyCompany.MyTechnology.MyApplications" />
</typeAliases>
<containers>
<container>
<register type="IMyInterfaceObjectAlias" mapTo="MyConcreteObjectAlias"/>
</container>
</containers>
</unity>
PS
使用“ singleton”(关键字)作为别名的名称。...恕我直言,这不是一个好主意。尽管从技术上讲可能可行,但浪费时间的调试关键字(而且名称也含糊不清)并不值得。
请注意我如何在别名“ Alias”的末尾加上“别名”,以免产生歧义。
只需提供一个友好的提示。