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.
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:
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.
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:
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
2 thoughts on “Autofac – utilizando com WCF”