Autofac – utilizando com WCF

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Agora que já vimos um pouco sobre o Autofac em alguns posts anteriores, vamos hoje ver como utilizar o Autofac com WCF. Primeiro de tudo, vamos criar um novo projeto do tipo WCF Service Application no Visual Studio.

create WCF project

Após o projeto criado, vamos abrir o NuGet Package Manager, e fazer a instalação do Autofac e do Autofac.WCF. Ao término da instalação, vamos ao próximo passo. Vamos adicionar à aplicação o Global.asax:

create golbal.asax

Com o Global.asax criado, no método Application_Start, vamos registrar nosso Serviço SVC no container do Autofac, e fazemos isso da seguinte forma:

protected void Application_Start(object sender, EventArgs e)
{
	var builder = new ContainerBuilder();
	builder.RegisterType<AutofacDemoWCF.Service1>();
	AutofacHostFactory.Container = builder.Build();
}

Agora, devemos alterar nosso SVC, que está assim:

<%@ ServiceHost Language="C#" Debug="true" Service="AutofacDemoWCF.Service1" CodeBehind="Service1.svc.cs" %>

Para que fique dessa forma:

<%@ ServiceHost Language="C#" Debug="true" Service="AutofacDemoWCF.Service1, AutofacDemoWCF" Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" CodeBehind="Service1.svc.cs" %>

O que fizemos aqui, foi no atributo Service, informar o nome do Assembly, após o nome da classe que implementa o serviço. E adicionamos o atributo Factory com a informação do “host factory” do Autofac. Pronto, serviço devidamente registrado no Autofac, agora vamos implementar nosso serviço para testarmos. Na interface IService1, declare o seguinte método:

[OperationContract]
string GetTeste();

E na classe Service1, implemente o método conforme abaixo:

public string GetTeste() => "Desenvolvedor Ninja - Autofac com WCF";

O código acima, utiliza o novo framework 4.6 do .net, que traz algumas melhorias e evoluções na linguagem, para saber mais, veja os posts C# 6.0 – novidades da linguagem – parte 1 e parte 2.

Rode o projeto usando o WCF Test Client, e faça o teste do serviço.

test wcf

Agora, vamos incrementar nosso exemplo, e utilizar em nosso WCF uma classe que seja injetada pelo Autofac. Então, crie uma interface chamada ICalculo, com o seguinte código:

namespace AutofacDemoWCF
{
    public interface ICalculo
    {
        double Calcular(double a, double b);
    }
}

Agora crie uma classe chamada Soma, que implemente a interface ICalculo:

namespace AutofacDemoWCF
{
    public class Soma : ICalculo
    {
        public double Calcular(double a, double b) => a + b;
    }
}

Agora precisamos registrar nossa classe no container do Autofac, para isso, vamos alterar o método Application_Start do Global.asax e deixá-lo dessa forma:

protected void Application_Start(object sender, EventArgs e)
{
	var builder = new ContainerBuilder();
	builder.RegisterType<AutofacDemoWCF.Service1>();
	builder.RegisterType<Soma>().As<ICalculo>().InstancePerLifetimeScope();
	AutofacHostFactory.Container = builder.Build();
}

Agora vamos utilizar a classe soma, em nosso WCF. Para isso, vamos criar um novo método na interface IService1:

[OperationContract]
double GetSoma(double a, double b);

E na nossa classe de serviço, vamos fazer algumas alterações, primeiro vamos declarar uma variável privada para nossa interface ICalculo:

private ICalculo _calculo;

Agora vamos criar um construtor para nosso serviço, e utilizá-lo para injetar usando o Autofac um objeto do tipo ICalculo:

public Service1(ICalculo calculo)
{
	this._calculo = calculo;
}

E por fim, vamos implementar o método GetSoma:

public double GetSoma(double a, double b) => _calculo.Calcular(a, b);

Pronto, agora rode a aplicação e faça o teste com o WCF Test Client e veja o resultado:

test wcf

Segue o código completo da classe Service1:

namespace AutofacDemoWCF
{
    public class Service1 : IService1
    {
        private ICalculo _calculo;

        public Service1(ICalculo calculo)
        {
            this._calculo = calculo;
        }

        public string GetTeste() => "Desenvolvedor Ninja - Autofac com WCF";

        public double GetSoma(double a, double b) => _calculo.Calcular(a, b);
    }
}

Viu como é simples utilizar o Autofac para aplicações WCF?

O código-fonte completo de nosso exemplo está disponível no GitHub: https://github.com/desenvolvedorninja/autofac-wcf

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja

Facebooktwittergoogle_plusredditpinterestlinkedinmail

2 thoughts on “Autofac – utilizando com WCF

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *