Fazer uma PerguntaFazer uma Pergunta
 

PerguntaRemoting sem construtor padrão

  • sexta-feira, 6 de novembro de 2009 18:24Roberto de Almeida Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Boa tarde pessoal!

    Estou trabalhando com .NET REMOTING, porém estou querendo criar um objeto no servidor sem ser com o construtor padrão. É possível criar um proxy para esse objeto que não possui o construtor padrão?


    Desde já agradeço!

Todas as Respostas

  • sábado, 7 de novembro de 2009 2:37Ari C. Raimundo Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Roberto,

    Nesse caso você tem que criar classes que implementam o padrão Factory, ou seja, classes cuja responsabilidade é a criação de objetos.

    Exploring the Factory Design Pattern
    http://msdn.microsoft.com/en-us/library/ms954600.aspx

    Att.

    Ari C. Raimundo
  • sábado, 7 de novembro de 2009 12:35Roberto de Almeida Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Ari,

    Eu tenho um windows service que utilizo remoting para acessá-lo. Em um dos casos eu preciso ter uma classe sem construtor padrão:

    public class Class1 : IClass1{
       public Class1(string pUsuario, string pSenha){
         // Implementação
       }

       public void Metodo1(int p1){
          // Implementação. Nesta hora vou utilizar usuário e senha específico passados no construtor
       }

       public void Metodo2(string p1, int p2){
          // Implementação. Nesta hora vou utilizar usuário e senha específico passados no construtor
       }
    }

    A aplicação que utiliza essa classe acessa via remoting da seguinte forma:

    IClass1 objeto = (IClass1)Activator.GetObject(typeof(IClass1), "urlremoting.namespace.Class1");

    Neste momento que preciso passar os parâmetros de usuário e senha que não podem ser configuradas já que são recebidas através da aplicação.

    Considerando essa situação como o padrão Factory me ajudaria?
  • sábado, 7 de novembro de 2009 13:57Nelson Borges Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Roberto,

    Já pensou em utilizar o padrão de injeção de depêndencia .. ?? .. veja : http://www.codeplex.com/unity/ , acho que esse block application iria cair com uma luva para vc..

    abs,

    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/ "Ao infinito e além.. "
  • sábado, 7 de novembro de 2009 16:50Ari C. Raimundo Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Roberto,

    Não testei o código, mas você faria da seguinte maneira:

    public interface IClassFactory
    {
        IClass GetClass(string usuario, string senha);
    }

    public interface IClass
    {
        string Usuario { get; set; }
        string Senha { get; set; }
        void Metodo1(int p1);
        void Metodo2(string p1, int p2);
    }

    public class Class : MarshalByRefObject, IClass
    {
        ... // implementação de IClass
    }

    public class ClassFactory : MarshalByRefObject, IClassFactory
    {
        public IClass GetClass(string usuario, string senha)
        {
            Class c = new Class();
            c.Usuario = usuario;
            c.Senha = senha;
            return c;
        }
    }


    Para criar então o objeto da classe Class usando o Factory seria da seguinte maneira:

    IClassFactory classFactory = (IClassFactory)Activator.GetObject(typeof(IClassFactory),
                              "urlremoting.namespace.ClassFactory");


    IClass classObject = classFactory.GetClass("user", "pwd");
    classObject.Metodo1(5);


    Espero ter ajudado.

    Att.

    Ari C. Raimundo
  • sexta-feira, 13 de novembro de 2009 0:03Ari C. Raimundo Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Roberto,

    Testou o código que sugeri?

    Att.

    Ari C. Raimundo
  • sexta-feira, 13 de novembro de 2009 0:57Roberto de Almeida Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Ari boa noite! Ainda não tive oportunidade de testar porque precisei viajar. Irei voltar amanhã e irei testar e dou o retorno.