2012-07-27 2 views
0

.Net 세상에는 단순하고 예를 들어 너무 많은 메타 데이터 구성이 필요하지 않은 DI 프레임 워크가 있습니까? XML 등 사용?주석 기반 DI와 제작자

자바 세계에서 가장 좋은 예는 JBoss Weld입니다. Weld를 사용하면 객체를 반환하는 제작자 메서드 (사용자 정의 주석으로 표시 할 수있는 메서드)를 사용할 수 있습니다. 위에 생성 된 객체는 필요할 때 삽입 할 수 있습니다. 이렇게하면 많은 메타 데이터 구성을 절약 할 수 있습니다. Ofcourse Weld는 XML도 필요하지만 광범위한 구성을 요구하지는 않습니다.

답변

2

ninject 당신이 코드에서이 같이 당신의 유형을 결합 할 수있다 :

으로 클래스를 장식하는 속성을 만들기 속성 this

에서 봐 가지고 사용 Ninject에 바인딩 상황에 대한

Bind<IWarrior>().To<Ninja>(); 

class ClimberNeeded : Attribute{} 

주어진 컨텍스트를 사용하여 구현에 대한 인터페이스를 바운드 WhenClassHas

Bind<IWarrior>().To<Samurai>().WhenClassHas<ClimberNeeded>(); 

속성으로 클래스를 장식하십시오.

[ClimberNeeded] 
class MountainousAttack { 
    [Inject] 
    IWarrior StandardMountainWarrior { get; set; } 
} 

여기 StandardMountainWarrior 대신 NinjaSamurai 될 것입니다.


그런 다음이 autoregister을 가지고 더 나은됩니다 TinyIOC있다 : 또는 당신은 할 수 있습니다 : 당신이 당신의 유형을 해결하기 위해 영리 대표를 작성할 수 있습니다

container.Register<IMyInterface, MyImplementation>(); 

그리고 funq. 정말 부족한 문서입니다. 하지만 멋진 vidcast이 있습니다.


및 더 많은 물론. 예 : unity, structuremapwindsor은 모두 "코드 내"구성입니다.

1

나는 NInject에 투표했습니다. 그러나 .NET을위한 거의 모든 다른 IoC 컨테이너는 코드를 구성 할 수 있습니다. 주석을 사용하는 것을 피하기 위해 제안했지만 대신 생성자 주입을 선호합니다. 우리가 .NET 세계에 있기 때문에 Annotation이나 더 나은 속성은 코드를 컨테이너와 결합하게 만들고, 이것은 주로 코드 결합을 줄이기 위해 컨테이너를 사용하기 때문에 반 패턴처럼 들린다.

관련 문제