2015-04-22 73 views
1

当我调用spring时,我有一个空对象引用。我只使用网络API丝毫NHibernate的Web Api Spring.Net配置

UserController的

namespace Work.WebServices 
{ 
    public class UserController : ApiController 
    { 
     UserManager userManager = new UserManager(); 

     public IList<User> GetAll() 
     { 
      return userManager.GetAll(); 
     } 
    } 
} 

AbstractDao的

namespace Work.Dao 
{ 
    public class AbstractDao 
    { 
     private ISessionFactory sessionFactory; 

     /// <summary> 
     /// Session factory for sub-classes. 
     /// </summary> 
     public ISessionFactory SessionFactory 
     { 
      protected get { return sessionFactory; } 
      set { sessionFactory = value; } 
     } 

     /// <summary> 
     /// Get's the current active session. Will retrieve session as managed by the 
     /// Open Session In View module if enabled. 
     /// </summary> 
     protected ISession CurrentSession 
     { 
      get { return sessionFactory.GetCurrentSession(); } 
     } 

     public IList<T> GetAll<T>() where T : class 
     { 
      ICriteria criteria = CurrentSession.CreateCriteria<T>(); 
      return criteria.List<T>(); 
     } 
    } 
} 

userDAO的

namespace Work.Dao 
{ 
    public class UserDao : AbstractDao 
    { 
    } 
} 

UserManger:正是在这里,有错误。它说userDAO的是空

namespace Work.Managers 
{ 
    public class UserManager 
    { 
     UserDao userDao; 
     [Transaction] 
     public IList<User> GetAll() 
     {   
      IList<User> List = userDao.GetAll<User>(); 

      return List; 
     } 
    } 
} 

SpringSetup

<?xml version="1.0" encoding="utf-8" ?> 
<objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database"> 
    <!--<object id="Sauce" 
      type="Ploeh.Samples.MenuModel.SauceBéarnaise, 
      Ploeh.Samples.MenuModel" />--> 
    <!-- Database and NHibernate Configuration --> 
    <db:provider id="DbProvider" 
        provider="SqlServer-2.0" 
        connectionString="Data Source=PC-PROF\SQLEXPRESS;Database=db_workn;Trusted_Connection=True;"/> 
    <!-- NHibernate SessionFactory configuration --> 
    <object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate21"> 
    <property name="DbProvider" ref="DbProvider"/> 
    <property name="MappingAssemblies"> 
     <list> 
     <value>Work</value> 
     </list> 
    </property> 
    <property name="HibernateProperties"> 
     <dictionary> 
     <entry key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> 
     <entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/> 
     <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> 
     </dictionary> 
    </property> 
    <!-- provides integation with Spring's declarative transaction management features --> 
    <property name="ExposeTransactionAwareSessionFactory" value="true" /> 
    </object> 

    <!-- gestionnaire de transactions --> 
    <object id="transactionManager" 
     type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate21"> 
    <property name="DbProvider" ref="DbProvider"/> 
    <property name="SessionFactory" ref="NHibernateSessionFactory"/> 
    </object> 

    <!-- Exception translation object post processor --> 
    <object type="Spring.Dao.Attributes.PersistenceExceptionTranslationPostProcessor, Spring.Data"/> 

    <!-- Data Access Objects --> 
    <object id="userDao" type="Work.Dao.AbstractDao, Work"> 
    <property name="SessionFactory" ref="NHibernateSessionFactory"/> 
    </object> 
</objects> 

WebConfig

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    Pour plus d’informations sur la configuration de votre application ASP.NET, rendez-vous sur 
    http://go.microsoft.com/fwlink/?LinkId=301879 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="spring"> 
     <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> 
     <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/> 
     <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/> 
    </sectionGroup> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 
    <spring> 
    <parsers> 
     <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"/> 
    </parsers> 
    <context> 
     <resource uri="~//SpringSetup.xml"/> 
    </context> 
    </spring> 
    <appSettings></appSettings> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5level %logger - %message%newline"/> 
     </layout> 
    </appender> 

    <!-- Set default logging level to DEBUG --> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="ConsoleAppender"/> 
    </root> 

    <!-- Set logging for Spring. Logger names in Spring correspond to the namespace --> 
    <logger name="Spring"> 
     <level value="INFO"/> 
    </logger> 

    <logger name="Spring.Data"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="NHibernate"> 
     <level value="DEBUG"/> 
    </logger> 
    </log4net> 
    <system.webServer> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

我的库 enter image description here

感谢

回答

0

你需要注入的依赖关系(你的DAO)来注册你的经理实例:

<object id="userManager" type="Work.Managers.UserManager, Work"> 
    <property name="Dao" ref="userDao"/> 
</object> 

而对于你DAO注入创造一个属性:

public class UserManager 
{ 
    //UserDao userDao; // <-- Remove this field 
    public UserDao Dao { protected get; set; } 
} 

如果您正在使用MVC您需要注册您的控制器与单春太假

<object name="UserController" type="Work.WebServices.UserController, Work.WebServices" singleton="false"> 
    <property name="UserManager" ref="userManager"/> 
</object> 

注射创建属性:

public class UserController : ApiController 
{ 
    //UserManager userManager = new UserManager(); 
    public UserManager UserManager { private get; set; } 
} 

如果您正在使用春天1.3.2中的Global.asax.cs文件:

protected void Application_Start() 
{ 
    // Add this line: 
    ControllerBuilder.Current.SetControllerFactory(typeof(SpringControllerFactory)); 
} 

或者在最新的春天的版本,你可以为here

public class MvcApplication : SpringMvcApplication 
{ 

} 
+0

我忘了把用户控制器类放在这篇文章中。我只是打字。而在这堂课中,我必须改变一些东西?亲切 – inforho

+0

我不使用MVC,只有Web API – inforho

+0

我还没有太多关于与web api的集成。我不知道这是否有用http://cravingcode.blogspot.mx/2012/01/wcf-web-api-dependency-injection-using.html – Najera