Spring.Net的空引用异常

时间:2017-11-29 09:54:00

标签: c# asp.net spring

我正在尝试在Asp.Net网络表单中使用spring.net。

我正在关注这篇文章以供参考 https://www.codeproject.com/Articles/23213/Integrating-Spring-NET-with-ASP-NET-Web-Site?msg=5459558#xx5459558xx

但在Page_Load中,我将数学和personDAO视为空,不确定我缺少什么。

如果您希望我分享代码,请与我们联系。我在文章中使用相同的代码,因此无法再次分享代码。

的Web.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <!-- Spring -->
        <sectionGroup name="spring">
            <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
            <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
            <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core" />
        </sectionGroup>
    </configSections>
    <!-- Spring -->
    <spring>
        <parsers>
            <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data" />
        </parsers>
        <context>
            <resource uri="config://spring/objects" />
        </context>
        <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database">
            <!-- You may choose any database -->
            <!--<db:provider id="DbProvider" provider="SqlServer-1.1" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=F:\projects\pm\App_Data\PM9Database.mdf;Integrated Security=True;User Instance=True"/>
            <db:provider id="DbProvider" provider="SqlServer-1.1" connectionString="Data Source=.\SQLEXPRESS;"/>-->
            <db:provider id="DbProviderMySQL" provider="MySql" connectionString="Server=localhost;Database=codeproject;User ID=root;Password=root;" />
            <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
                <property name="ConfigSections" value="databaseSettings" />
            </object>
            <object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12">
                <!-- Depending on database you want set it-->
                <property name="DbProvider" ref="DbProviderMySQL" />
                <property name="MappingAssemblies">
                    <list>
                        <value>CodeProject.DAO</value>
                    </list>
                </property>
                <property name="HibernateProperties">
                    <dictionary>
                        <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
                        <entry key="hibernate.dialect" value="NHibernate.Dialect.MySQLDialect" />
                        <entry key="hibernate.connection.driver_class" value="NHibernate.Driver.MySqlDataDriver" />
                    </dictionary>
                </property>
            </object>

      <!-- TxManager -->
      <object id="HibernateTransactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate12">
        <property name="DbProvider" ref="DbProviderMySQL" />
        <property name="SessionFactory" ref="SessionFactory" />
      </object>

            <object name="MyMathObj" type="Math, App_code" />

            <object id="PersonDAO" type="CodeProject.DAO.PersonDAO, CodeProject.DAO">
                <property name="SessionFactory" ref="SessionFactory" />
            </object>

      <object id="PersonDAOTx" type="Spring.Transaction.Interceptor.TransactionProxyFactoryObject, Spring.Data">
        <property name="PlatformTransactionManager" ref="HibernateTransactionManager" />
        <property name="Target" ref="PersonDAO" />

        <property name="TransactionAttributes">
          <name-values>
            <add key="Save*" value="PROPAGATION_REQUIRES_NEW" />
            <add key="SaveO*" value="PROPAGATION_REQUIRES_NEW" />
            <add key="Delete*" value="PROPAGATION_REQUIRED" />
            <add key="Update*" value="PROPAGATION_REQUIRED" />
            <add key="Query*" value="PROPAGATION_REQUIRED" />
          </name-values>
        </property>

      </object>

      <object id="FirstServiceImpl" type="CodeProject.DAO.FirstService, CodeProject.DAO">
        <property name="Message" value="Test Message" />
      </object>

      <!--Web Services-->
      <object id="FirstService" type="Spring.Web.Services.WebServiceExporter, Spring.Web">
        <property name="TargetName" value="FirstServiceImpl" />
        <property name="Namespace" value="http://myCompany/services" />
        <property name="Description" value="My First web service" />
      </object>


      <!-- Pages -->
            <object type="Default.aspx">
                <property name="Message" value="Hello from Web.Config" />
                <property name="Math" ref="MyMathObj" />
                <property name="PersonDAO" ref="PersonDAOTx" />
            </object>
        </objects>
    </spring>
    <appSettings />
    <connectionStrings />
    <system.web>
        <compilation debug="true">
            <assemblies>
                <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /></assemblies></compilation>
        <authentication mode="Windows" />
        <httpHandlers>
            <!-- Spring Handler -->
            <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" />
      <add verb="*" path="*.asmx" type="Spring.Web.Services.WebServiceHandlerFactory, Spring.Web" />
        </httpHandlers>
        <httpModules>
            <add name="SpringModule" type="Spring.Context.Support.WebSupportModule, Spring.Web" />
            <!-- Required for managing NHibernate session between http requests-->
            <add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate12" />
        </httpModules>
    </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-0.0.0.20110" newVersion="0.0.0.20110" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Spring.Aop" publicKeyToken="65e474d141e25e07" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-0.0.0.20110" newVersion="0.0.0.20110" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.2.4000" newVersion="2.1.2.4000" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>

    </system.webServer>
</configuration>

Default.aspx.cs

public partial class _Default : System.Web.UI.Page 
{
    private string message;

    public string Message
    {
        get { return message; }
        set { message = value; }
    }

    private Math math;

    public Math Math
    {
        get { return math; }
        set { math = value; }
    }

    IPersonDAO personDAO;

    public IPersonDAO PersonDAO
    {
        get { return personDAO; }
        set { personDAO = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(message);
        Response.Write(math.add(30, 50));

        Person p = new Person();
        p.Name = "Maruf";
        personDAO.Save(p);
        Person p100 = personDAO.LoadByID(1); 
    }
}

Person.cs

namespace CodeProject.DAO
{
    public class Person : IBusinessEntity
    {
        private long id;
        private string name;
        private int versionNumber;
        //These methods should be virtual for NHibernate Mapping
        public virtual long Id
        {
            get { return id; }
            set { id = value; }
        }

        public virtual int VersionNumber
        {
            get { return versionNumber; }
            set { versionNumber = value; }
        }


        public virtual string Name
        {
            get { return name; }
            set { name = value; }
        }
    }

}

BseDAO.cs

using System;
using System.Collections.Generic;
using System.Text;
using Spring.Data.NHibernate;
using NHibernate;
using System.Collections;

namespace CodeProject.DAO
{
    public abstract class BaseDAO<EntityT, idT> : IBaseDAO<EntityT, idT>
    {
        protected HibernateTemplate hibernateTemplate;

        public ISessionFactory SessionFactory
        {
            set
            {
                hibernateTemplate = new HibernateTemplate(value);
                hibernateTemplate.TemplateFlushMode = TemplateFlushMode.Auto;
            }
        }
        public BaseDAO()
        {
        }

        public virtual EntityT LoadByID(idT id)
        {
            EntityT entity = (EntityT)hibernateTemplate.Load(typeof(EntityT), id);
            return entity;
        }

        public virtual IList LoadAll()
        {
            return hibernateTemplate.LoadAll(typeof(EntityT));
        }

        public virtual IList Load(string hsqlQuery, object[] values)
        {
            return hibernateTemplate.Find(hsqlQuery, values);
        }

        public virtual void Save(EntityT fine)
        {
            IBusinessEntity entity = (IBusinessEntity)fine;
            hibernateTemplate.Save(fine);
        }

        public virtual void SaveOrUpdate(EntityT fine)
        {
            IBusinessEntity entity = (IBusinessEntity)fine;
            hibernateTemplate.SaveOrUpdate(fine);
        }
    }
}

IBaseDAO.cs

using System;
using System.Collections.Generic;
using System.Collections;

namespace CodeProject.DAO
{
    public interface IBaseDAO<EntityT, idT>
    {
        IList LoadAll();
        EntityT LoadByID(idT id);
        IList Load(string hsqlQuery, object[] values);
        void Save(EntityT fine);
        void SaveOrUpdate(EntityT fine);
        NHibernate.ISessionFactory SessionFactory { set; }
    }
}

0 个答案:

没有答案