Frage

Versuch, in einem Test ein Benutzerkonto zu erstellen. Das Erhalten einer Objektreferenz wird jedoch beim Ausführen nicht auf eine Instanve eines Objektfehlers eingestellt.

Hier ist meine Klasse für Mitgliedschaftsanbieter, sie befindet sich in einer Klassenbibliothek mycompany.myapp.domain.dll:

using System;
using System.Collections.Generic;
using System.Web.Security;

namespace MyCompany.MyApp.Domain
{
    public class MyMembershipProvider : SqlMembershipProvider
    {
        const int defaultPasswordLength = 8;
        private int resetPasswordLength;

        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
        {
            resetPasswordLength = defaultPasswordLength;
            string resetPasswordLengthConfig = config["resetPasswordLength"];
            if (!String.IsNullOrEmpty(resetPasswordLengthConfig))
            {
                config.Remove("resetPasswordLength");

                if (!int.TryParse(resetPasswordLengthConfig, out resetPasswordLength))
                {
                    resetPasswordLength = defaultPasswordLength;
                }
            }
            base.Initialize(name, config);
        }

        public override string GeneratePassword()
        {
            return Utils.PasswordGenerator.GeneratePasswordAsWord(resetPasswordLength);
        }
    }
}

Hier ist meine App.config für meine separate Testklassenbibliothek mycompany.myapp.doman.test.dll, die auf meine oben genannte Geschäftsdomänenbibliothek verweist:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="SqlServer" connectionString="data source=mycomp\SQL2008;Integrated Security=SSPI;Initial Catalog=myDatabase" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.web>
        <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="15">
            <providers>
                <clear/>
                <add name="MyMembershipProvider"
                     type="MyCompany.MyApp.Domain.MyMembershipProvider,MyCompany.MyApp.Domain"
                     connectionStringName="SqlServer"
                     applicationName="MyApp"
                     minRequiredNonalphanumericCharacters="0"
                     enablePasswordRetrieval="false"
                     enablePasswordReset="true"
                     requiresQuestionAndAnswer="false"
                     requiresUniqueEmail="true"
                     passwordFormat="Hashed"/>
            </providers>
        </membership>
    </system.web>
</configuration>

Hier ist meine Methode, die "Objektreferenz wird nicht auf eine Instanve eines Objekts eingestellt" eingestellt.

public class MemberTest
    {
        public static void CreateAdminMemberIfNotExists()
        {
            MembershipCreateStatus status;
            status = MembershipCreateStatus.ProviderError;

            MyMembershipProvider provider = new MyMembershipProvider();

            provider.CreateUser("Admin", "password", "someone@somewhere.co.uk", "Question", "Answer", true, Guid.NewGuid(), out status);
        }
    }

Es wirft den Anbieter.Creatuser -Linie auf

War es hilfreich?

Lösung

Ich bin mir ziemlich sicher, dass Sie Provider anrufen sollten.

Andere Tipps

Na ja, nicht ganz jemand hatte die Antwort. CSGERO war auf dem richtigen Weg, obwohl Initialize das Problem war. Aber nur das direkt zu bezeichnen, war keine Lösung. Das funktioniert:

public class MemberTest
    {
        public static void CreateAdminMemberIfNotExists()
        {
            MembershipCreateStatus status;
            MembershipUser member = Membership.CreateUser("Admin", "password", "email@somewhere.co.uk", "Question", "Answer", true, out status);
        }
    }

Ich glaube, mein Mitgliedsanbieter erfordert direkt das Festlegen der Konfigurationseigenschaften, die normalerweise in App.config oder Web.config gespeichert sind und dann initialisieren. Wenn Sie die statische CreateUser -Methode in der Mebership -Klasse aufrufen, wird jedoch die Konfiguration gelesen. Der in der Konfiguration angegebene Typ wird analysiert, geladen und initialisiert.

Ist der Fehler direkt auf Anbieter.

Vielleicht fehlt eine Abhängigkeit - haben Sie die entsprechenden DB -DLLs auf dem Weg?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top