Asp.net mvc 2 ASP.NET MVC Global.asax与Spring的注入

Asp.net mvc 2 ASP.NET MVC Global.asax与Spring的注入,asp.net-mvc-2,dependency-injection,global-asax,spring.net,Asp.net Mvc 2,Dependency Injection,Global Asax,Spring.net,我正在尝试将一个属性注入到SpringMVCapApplication(从)中 然后我有一个Services.xml文件,其中包含我的定义 <?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net"> <object name="HttpApplicationConfigurer" type="Spring.Context.Support.Http

我正在尝试将一个属性注入到SpringMVCapApplication(从)中

然后我有一个Services.xml文件,其中包含我的定义

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object name="HttpApplicationConfigurer" type="Spring.Context.Support.HttpApplicationConfigurer, Spring.Web">
    <property name="ApplicationTemplate">
      <object>
        <property name="SomeService" ref="ISomeService" />
      </object>
    </property>
  </object>
  <object id="ISomeService" type="WebProject.Services.SomeService, WebProject">
    <constructor-arg ref="UserService" />
  </object>
</objects>

mvcapapplication扩展了springmvcapapplication类,该类实际上设置了Spring.net上下文,因此在我看来,使用di配置其属性有点奇怪

您现在覆盖的方法旨在允许您在将Spring.net应用程序上下文传递到asp.net mvc基础结构之前,对其进行最后一秒的更改


在您的情况下,稍微好一点的解决方法是让SomeService直接在其getter中访问上下文。这样,您就拥有了Spring托管对象作用域的优势,这是您现在没有的

我现在只是重写该方法,因为我不确定如何获取对我的服务的引用。因此,与其遵循Erich Eichinger的指导,不如建议在我的getter中加入一些逻辑?当你说直接访问上下文时,你的意思是像我在重写方法中那样使用
context.GetContext()
?抱歉,如果这是一个愚蠢的问题,我以前从未使用过Spring。这根本不是一个愚蠢的问题。。。我只是建议对您现有的变通方法进行改进,但它仍然应该被视为变通方法。请注意,您提到的帖子似乎涉及到经典的asp.net支持,我不确定它是否适用于SpringMVC。但这是你通常应该避免的,所以请考虑这是一个改进的解决方案,而不是一个明确的解决方案。酷。我会坚持下去,直到我能找到一些不是解决办法的东西。谢谢
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object name="HttpApplicationConfigurer" type="Spring.Context.Support.HttpApplicationConfigurer, Spring.Web">
    <property name="ApplicationTemplate">
      <object>
        <property name="SomeService" ref="ISomeService" />
      </object>
    </property>
  </object>
  <object id="ISomeService" type="WebProject.Services.SomeService, WebProject">
    <constructor-arg ref="UserService" />
  </object>
</objects>
protected override void ConfigureApplicationContext()
{
    base.ConfigureApplicationContext();

    SomeService = (ISomeService)ContextRegistry.GetContext().GetObject("ISomeService");
}