使用web.config进行Unity配置

时间:2016-01-26 14:37:48

标签: c# dependency-injection web-config unity-container

我有以下代码:

using System.Web.Http;
using Coben.DataAccess.Tests.Constructiv.CentralDB.Contracts.ServiceContracts;
using Coben.Person.DataAccess;
using Constructiv.CentralDB.Contracts.ServiceContracts;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using Unity.WebApi;

namespace CoBen.UI
{
    public static class UnityConfig
    {
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            container.RegisterInstance<IPersonService>(new PersonServiceMock().Mock);
            container.RegisterType<PersonRepository>();
            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }
    }
}

这会配置我的依赖注入。 但是我想从我的web.config中做同样的事情。

我有以下内容:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="IPersonService" type="Constructiv.CentralDB.Contracts.ServiceContracts.IPersonSercice, Constructiv.CentralDB.Contracts.ServiceContracts" />
<namespace name="Coben.DataAccess.Tests.Constructiv.CentralDB.Contracts.DataContracts.Persons" />
<assembly name="Coben.DataAccess.Tests.Constructiv.CentralDB.Contracts.DataContracts.Persons" />
<container>
  <register type="IPersonService" name="special" mapTo="PersonServiceMock().Mock" />    
</container>

但是,当我这样做时,我收到一条错误消息:

无法解析类型名称或别名IPersonService。请检查您的配置文件并验证此类型名称。

我做错了什么或我没看到什么?

更新: 我知道得到以下错误: 无法解析类型名称或别名Constructiv.CentralDB.Contracts.ServiceContracts.IPersonService,Constructiv.CentralDB.Contracts.ServiceContracts。请检查您的配置文件并验证此类型名称。

我的配置如下:

  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>        
    <register type="Constructiv.CentralDB.Contracts.ServiceContracts.IPersonService, Constructiv.CentralDB.Contracts.ServiceContracts"                  
        mapTo="Coben.DataAccess.Tests.Constructiv.CentralDB.Contracts.DataContracts.Persons.PersonServiceMock().Mock, Coben.DataAccess.Tests.Constructiv.CentralDB.Contracts.DataContracts.Persons" />    
</container>

1 个答案:

答案 0 :(得分:3)

您需要使用web.config中的设置配置UnityContainer实例。

UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(_container);
相关问题