의존성 주입이 C #과 같은 언어에 직접 더 잘 통합 될 수있는 방법에 대해 조금 생각하고 있습니다. 나는 당신의 의견을 듣고 싶은 잠재적 인 해결책을 생각해 냈습니다. 많은 의존성 주입 프레임 워크를 사용하지 않아서 간과하는 것이있을 수 있습니다.
어쨌든 아이디어는 키워드를 사용하여 속성을 "주입 가능"으로 선언 할 수 있도록하는 것입니다. 객체가 인스턴스화되고 해당 속성이 생성자 또는 객체 이니셜 라이저를 통해 초기화되지 않으면 전역 서비스에서 해당 속성 유형의 인스턴스를 요청합니다.
마찬가지로 주입 된 속성 유형을 인스턴스화 할 수 있도록 다른 유형의 핸들러를 해당 서비스에 등록합니다.
이러한 종류의 아키텍처 IMO를 사용하는 것의 장점은 상당히 유연하고 사용하기 쉽다는 것입니다. 단점은 주입이있는 클래스를 시작할 때마다 싱글 톤에 콜 아웃을 수행하는 데 약간의 오버 헤드가있을 수 있다는 것입니다.
그런 다음 고성능 솔루션에서 자주 인스턴스화되는 클래스의 경우에만 문제가되므로 큰 문제가되지 않습니다. 아마도 그러한 경우에 일종의 팩토리를 사용할 수 있습니다.
생각, 문제, 질문, 더 나은 아이디어?
암호
public class SomeClass
{
public SomeClass()
{
//implicit behavior if Animal is not set in constructor or initializer
this.Animal = GlobalInjector.Get(this,typeof(Mammal))
}
public injectable Mammal Animal
{
get;
set;
}
}
GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));