[deprecated]Oragon Architecture – Application Hosting – Suporte para Nijnect e SimpleInjector e qualquer outro container

[deprecated]

Bom, tenho escrito o bastante para nem precisar perguntar como você está! Né?!

Já estamos íntimos e agora vou contar uma novidade! Implementei o suporte a dois containers bem conceituados no mercado e simplifiquei o modelo para que você possa implementar facilmente uma nova extensão para qualquer IoC container que tenha o interesse de trabalhar.

Só para mostrar como é simples, está aqui todo o código para estender o Oragon Architecture Application Hosting para o Ninject.

public interface INinjectFactory : IContainerFactory<IKernel> { }
public class NinjectApplicationHostController : ApplicationHostController<INinjectFactory, IKernel> { }
public class NinjectApplicationHost : ApplicationHost<NinjectApplicationHostController, INinjectFactory, IKernel> { }

Se não se convenceu ainda, aqui está o código para criar uma integração nova com o SimpleInjector

public interface ISimpleInjectorFactory : IContainerFactory<Container> { }
public class SimpleInjectorApplicationHostController : ApplicationHostController<ISimpleInjectorFactory, Container> { }
public class SimpleInjectorApplicationHost : ApplicationHost<SimpleInjectorApplicationHostController, ISimpleInjectorFactory, Container> { }

Simples né?!

A escolha dos dois frameworks se deu pelas suas características enquanto o SimpleInjector é o mais rápido em diversos benchmarks, o Ninject é de cara o mais procurado. Embora eu ainda continue usando o Spring.Net em meus projetos, você pode seguir com seus próprios frameworks e pipelines de aplicação independentes. 3 projetos foram criados para exemplificar.

Eu ainda estou trabalhando na identificação de como usar o ciclo de vida automático desses caras (autocarregamento) etc, para poder implementar a chamada ao pipeline no Start e Stop do Windows Services, inclusive se você já souber, me conte.

No Spring.Net o ciclo de vida é gerenciado de 2 formas, automática, com a implementação de 2 interfaces IInitializingObject, própria do Spring e IDisposable. No load do Spring a interface IInitializingObject permite o controle do fluxo com o método AfterPropertiesSet, enquanto no unload do Spring.Net o método Dispose é chamado.

Também, para o Spring, implementei uma segunda alternativa que é usar a interface ILifeCycle, que provê os métodos Start e Stop, ficou assim:

public interface ISpringFrameworkFactory : IContainerFactory<IApplicationContext> { }
public class SpringFrameworkApplicationHost : ApplicationHost<SpringFrameworkApplicationHostController, ISpringFrameworkFactory, IApplicationContext> { }
public class SpringFrameworkApplicationHostController : ApplicationHostController<ISpringFrameworkFactory, IApplicationContext>
{
	public override void Start()
	{
		foreach (var item in this.Container.GetObjects<ILifecycle>().Select(it => it.Value))
		{
			item.Start();
		}
	}

	public override void Stop()
	{
		if (this.Container != null)
		{
			foreach (var item in this.Container.GetObjects<ILifecycle>().Select(it => it.Value).Reverse())
			{
				item.Stop();
			}
			this.Container.Dispose();
			this.Container = null;
		}
	}
}

Bem simples né?!

Simples mas muito eficiente. Cada uma dessas integrações representam 100% do código necessário para toda a criação da integração.

A propósito, o Factory, do container é um ponto de configuração. Isso acontece pela necessidade de configuração dos frameworks atuais. Como todos se baseiam em configuração fluent, que não consigo abstrair, nada mais justo que delegar a você a melhor forma para criar seus containers. O resultado é que você precisará de mais uma classe em seu projeto, ou em sua infraestrutura, apenas para inicializar o container. Todo o resto fica com o Oragon Architecture.

IOC Containers

Se você quer que seu IoC container esteja presente no Oragon, faça um Pull Request ou me mande um email respondendo as seguintes perguntas:

1) Qual o nome do framework e endereço do projeto

2) Como manipular o ciclo de vida do container e dos objetos definidos nele (há uma interface, uma marcação, métodos específicos, etc). Responder dizendo que não há manipulação também é válido.

Para que você entenda o que quero, vou citar o Spring.Net que conheço bem:

1) Qual o nome do framework e endereço do projeto

R: Spring.Net ( http://www.springframework.net/ e http://www.springframework.net/doc-latest/reference/html/index.html )

 

2) Como manipular o ciclo de vida do container e dos objetos definidos nele (há uma interface, uma marcação, métodos específicos, etc). Responder dizendo que não há manipulação também é válido.

R: 5.6.1. Lifecycle interfaces,

Perguntas e respostas simples, né?!

Bom, espero que tenha gostado!

 

Luiz Carlos Faria

Mensagem do Autor

Espero que goste desse post. Não deixe de comentar e falar o que achou. 

Se acha que esse post pode ajudar alguém que você conheça, compartilhe!

 

Eventos passados

novembro 2020
outubro 2020
setembro 2020
agosto 2020
Nenhum evento encontrado!
Carregar Mais

Publicidade

Assine

0 comentários

Enviar um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.

Agenda & Eventos

outubro

novembro 2020

dezembro
DOM
SEG
TER
QUA
QUI
SEX
SAB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
Events for 1st novembro
Sem Eventos
Events for 2nd novembro
Sem Eventos
Events for 3rd novembro
Sem Eventos
Events for 4th novembro
Sem Eventos
Events for 5th novembro
Sem Eventos
Events for 6th novembro
Sem Eventos
Events for 7th novembro
Sem Eventos
Events for 8th novembro
Sem Eventos
Events for 9th novembro
Sem Eventos
Events for 10th novembro
Sem Eventos
Events for 11th novembro
Sem Eventos
Events for 12th novembro
Events for 13th novembro
Sem Eventos
Events for 14th novembro
Sem Eventos
Events for 15th novembro
Sem Eventos
Events for 16th novembro
Sem Eventos
Events for 17th novembro
Sem Eventos
Events for 18th novembro
Sem Eventos
Events for 19th novembro
Sem Eventos
Events for 20th novembro
Sem Eventos
Events for 21st novembro
Sem Eventos
Events for 22nd novembro
Sem Eventos
Events for 23rd novembro
Sem Eventos
Events for 24th novembro
Sem Eventos
Events for 25th novembro
Sem Eventos
Events for 26th novembro
Sem Eventos
Events for 27th novembro
Sem Eventos
Events for 28th novembro
Sem Eventos
Events for 29th novembro
Sem Eventos
Events for 30th novembro
Sem Eventos
Share This