Converti questa classe astratta in un'interfaccia

1

Ho un metodo di sicurezza che mi piacerebbe poter inserire in altre classi nel mio programma. Attualmente è una classe astratta, ma ritengo che sarebbe più appropriata come interfaccia. Qualcuno può aiutarmi a convertirlo? Non ero in grado di chiamare PrincipalIdentity () nello stesso modo in cui potevo essere astratto.

public abstract class SecurityBase {

        public GenericPrincipal PrincipalIdentity() {

            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

            string authenticationType = windowsIdentity.AuthenticationType;
            string userName = windowsIdentity.Name.Split('\')[1];;

            GenericIdentity authenticatedGenericIdentity = new GenericIdentity(userName, authenticationType);

            string[] Roles = //generate array;    
            GenericPrincipal pr = new GenericPrincipal(authenticatedGenericIdentity, Roles);

            return pr;
        }
    }
    
posta markokstate 15.07.2015 - 23:56
fonte

2 risposte

4

C'è una ragione per cui hai bisogno di questo metodo nei tuoi corsi di business? Non riesco a vedere alcun riferimento a this o ad altri campi membro, il che significa che si tratta di un metodo di utilità disconnesso che può tranquillamente sedere in un ordinamento di classe UserProvider, un servizio che è probabilmente ortogonale al tuo effettivo dominio aziendale.

Se fai vuoi averlo come parte degli oggetti, puoi simulare l'ereditarietà dell'implementazione con le interfacce usando i metodi di estensione:

public interface ISecurityEnabled 
{
     // empty marker interface.
}

public static class SecurityExtensions 
{
    public static GenericPrincipal GetPrincipalIdentity
           (this ISecurityEnabled securityEnabledObject)
    {
         // your code here.
    } 
}

Ciò ti consentirà di chiamare GetPrincipalIdentity su ogni oggetto contrassegnato con l'interfaccia ISecurityEnabled . Se il metodo richiede effettivamente qualche proprietà da quell'oggetto, aggiungili all'interfaccia ISecurityEnabled per renderli disponibili nel metodo di estensione.

    
risposta data 16.07.2015 - 06:04
fonte
-1

Sono d'accordo con Alexus. Di seguito è l'interfaccia che andrebbe con il tuo abstract sopra. Non puoi inserire la logica in un'interfaccia, quindi è tutto ciò che ottieni.

public interface ISecurity{
    GenericPrincipal PrincipalIdentity();
}
    
risposta data 16.07.2015 - 04:09
fonte

Leggi altre domande sui tag