2015-12-18 33 views
1

我想用团结来管理我的蒙戈库,但是当我尝试使用Web.configLoadConfiguration()注册它来管理mongorepository单身我得到一个错误,我无法破译:如何使用统一

的例外类型“System.ArgumentException”发生在 Microsoft.Practices.Unity.Configuration.dll但在 用户代码没有处理

附加信息:在这 配置部分定义了一个名为“”的容器。

这是我的Global.asax

using System.Web; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 
using Microsoft.Practices.Unity; 
using Microsoft.Practices.Unity.Configuration; 


namespace OOP_project 
{ 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     internal static readonly IUnityContainer unity = new UnityContainer(); 

     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      unity.LoadConfiguration(); 
     } 
    } 
} 

,这是我的web.config的有关部分

<configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> 
    </configSections> 
    <unity> 
    <typeAliases> 
     <typeAlias alias="string" type="System.String, mscorlib" /> 
    </typeAliases> 
    <containers> 
     <container name="container"> 
     <types> 
      <type type="MongoRepository.MongoRepository`1, MongoRepository" mapTo="MongoRepository.MongoRepository`1, MongoRepository"> 
      <lifetime type="Singleton" /> 
      <constructor> 
       <param name="connectionString" parameterType="string" value="mongodb://127.0.0.1/Blog"></param> 
      </constructor> 
      </type> 
     </types> 
     </container> 
    </containers> 
    </unity> 

我想了解这个错误实际上意味着,以及如何修理它。

回答

2

我看到两个问题与您的代码:

首先,你需要当你调用LoadConfiguration指定容器名称。在配置文件中,容器名称为“容器”(在<container> XML元素),所以你需要指定这样的:

unity.LoadConfiguration("container"); 

或者,在配置文件中改变容器名称为空字符串是这样的:

<container name=""> 

这是不直接关系到你的问题的第二个问题是,单身一生应该这样的小书所指明:

<lifetime type="singleton" /> 

顺便说一句,为什么你想使用配置文件来配置Unity?用配置文件配置Unity是脆弱的。例如,如果您在代码中更改类名称,它将不会在配置文件中更改。你将不得不手动改变它,否则你的应用程序将会中断。

除非你需要能够改变的依赖而无需重新编译,你应该更喜欢通过代码来配置容器。

请注意,你可以做一些通过代码的注册和一些配置文件(你需要能够改变而无需重新编译的依赖)英寸您可以在网上轻松找到如何做到这一点的资源。