Classes (projeto com IoC)

Segue abaixo um processo especifico para criação de classes em um projeto que utiliza IoC e principio DIP:

Processo para criação de classes:

1) APPLICATION
> Criar uma interface;
> Criar uma classe;
> Adicionar a referencia da classe de Controller em:
[ProjetoExemplo.Web/App_Start/NinjectWebCommon.cs] no método [RegistraController]
[ProjetoExemplo.Teste/Infraestrutura/NinjectCommon.cs] no método [RegistraController]

Ex: Kernel.Bind<IExemploController>().To<ExemploController>();

> Adicionar a propriedade da controller na classe [BasePage] dentro da region [Propriedades] (Se a classe controller for utilizada dentro de um UserControl, deve-se adicionar a propriedade na [BaseUserControl] tambem).
Ex da propriedade:

[Inject]
public IExemploController ExemploController { get; set; }

Esta propriedade serve para pegar a instancia da controller que esta dentro do Kernel do Ninject onde é feito o IoC para todas as demais instancias de classes (Negocio e repositorio).
Quando uma classe de negocio for utilizada dentro de uma classe controller ou de outra negocio, a dependencia deve ser inserida no construstor da classe atraves da interface correspondente. O arquivo [ExemploController] expoe um exemplo sobre isso.

2) DOMINIO
> Criar uma interface;
> Criar uma classe;
> Adicionar a referencia da classe de negocio em:
[ProjetoExemplo.Web/App_Start/NinjectWebCommon.cs] no método [RegistraNegocio]
[ProjetoExemplo.Teste/Infraestrutura/NinjectCommon.cs] no método [RegistraNegocio]

Ex: Kernel.Bind<IExemploNegocio>().To<ExemploNegocio>();

3) REPOSITORIO
> Criar uma interface;
> Criar uma classe;
> Adicionar a referencia da classe de Repositorio em:
[ProjetoExemplo.Web/App_Start/NinjectWebCommon.cs] no método [RegistraRepositorio]
[ProjetoExemplo.Teste/Infraestrutura/NinjectCommon.cs] no método [RegistraRepositorio]

Ex: Kernel.Bind<IExemploRepositorio>().To<ExemploRepositorio>();
OBS: O processo não precisa necessariamente seguir a ordem descrita acima.

EXEMPLO DA CLASSE [NinjectWebCommon]:

using (…)

[assembly: WebActivatorEx.PreApplicationStartMethod(
typeof(ProjetoExemplo.Web.NinjectWebCommon), “Start”)]

[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(
typeof(ProjetoExemplo.Web.NinjectWebCommon), “Stop”)]

namespace ProjetoExemplo.Web
{
public static class NinjectWebCommon
{
public static StandardKernel Kernel { get { return _kernel; } }

private static readonly Bootstrapper bootstrapper = new Bootstrapper();
private static StandardKernel _kernel;

public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);

}

public static void Stop()
{
bootstrapper.ShutDown();
}

private static IKernel CreateKernel()
{
_kernel = new StandardKernel();
try
{
_kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
_kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

RegisterServices(_kernel);
return _kernel;
}
catch
{
_kernel.Dispose();
throw;
}
}

public static void RegisterServices(IKernel Kernel)
{
RegistraNegocio(Kernel);
RegistraRepositorio(Kernel);
RegistraController(Kernel);
}

private static void RegistraController(IKernel Kernel)
{
Kernel.Bind<IConsultaExemploController>().To<ConsultaExemploController>();
}

private static void RegistraNegocio(IKernel Kernel)
{
Kernel.Bind<IExemploNegocio>().To<ExemploNegocio>();

}

private static void RegistraRepositorio(IKernel Kernel)
{
Kernel.Bind<IExemploRepositorio>().To<ExemploRepositorio>();

}}}

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s