간단한 애플릿 프리젠테이션 Unity의 3가지 종속 주입 방식
5138 단어 Asp.net
먼저 컨트롤러 프로그램을 만들고 다음 두 개의 Unity 기반 프로그램 집합을 추가합니다: Microsoft.Practices.Unity.dll 및 Microsoft.Practices.Unity.Configuration.dll.그런 다음 다음과 같은 인터페이스(IA, IB, IC 및 ID)와 각각의 실현 클래스(A, B, C, D)를 정의합니다.유형 A에는 인터페이스 IB, IC, ID 등 3개의 속성 B, C 및 D가 정의되어 있습니다.그 중에서 속성 B는 함수에서 초기화된다.속성 C에 Microsoft가 적용됩니다.Practices.Unity.DependencyAttribute 특성은 속성 주입 방식으로 초기화되어야 하는 의존 속성임을 의미한다.속성 D는 Microsoft가 적용된 메서드 Initialize를 통해 초기화됩니다.Practices.Unity.InjectionMethodAttribute 는 주입 방법이 자동으로 호출된다는 것을 의미합니다.
1: namespace UnityDemo
2: {
3: public interface IA { }
4: public interface IB { }
5: public interface IC { }
6: public interface ID {}
7:
8: public class A : IA
9: {
10: public IB B { get; set; }
11: [Dependency]
12: public IC C { get; set; }
13: public ID D { get; set; }
14:
15: public A(IB b)
16: {
17: this.B = b;
18: }
19: [InjectionMethod]
20: public void Initialize(ID d)
21: {
22: this.D = d;
23: }
24: }
25: public class B: IB{}
26: public class C: IC{}
27: public class D: ID{}
28: }
그런 다음 애플리케이션에 대한 구성 파일을 추가하고 다음 Unity 구성 섹션을 정의합니다.이 설정에서defaultContainer라는 Unity 용기를 정의하고 위에서 정의한 인터페이스와 대응하는 실행 클래스 사이의 매핑 유형이 일치합니다.
最后在Main方法中编写如下的程序:创建一个代表IoC容器的UnityContainer对象,并加载配置信息对其进行初始化。然后调用它的泛型的Resolve方法创建一个实现了泛型接口IA的对象。最后将返回对象转变成类型A,并检验其B、C和D属性是否是空。1: 2:
3: 4: 5: 6:
7: 16:8: 15:9: 14:10: 11: 12: 13:
1: static void Main(string[] args)
2: {
3: IUnityContainer container = new UnityContainer();
4: UnityConfigurationSection configuration = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
5: configuration.Configure(container, "defaultContainer");
6: A a = container.Resolve() as A;
7: if (null != a)
8: {
9: Console.WriteLine("a.B == null ? {0}", a.B == null ? "Yes" : "No");
10: Console.WriteLine("a.C == null ? {0}", a.C == null ? "Yes" : "No");
11: Console.WriteLine("a.D == null ? {0}", a.D == null ? "Yes" : "No");
12: }
13: }
다음과 같은 실행 결과에서 우리는 다음과 같은 결론을 얻을 수 있다. Resolve 방법을 통해 되돌아오는 것은 A 유형의 대상이다.이 대상의 세 가지 속성이 효과적으로 초기화되었다.이 간단한 프로그램은 인터페이스 주입(상응하는 인터페이스를 통해 설정에 따라 상응하는 실현 유형을 해석), 구조기 주입(속성 B), 속성 주입(속성 C)과 방법 주입(속성 D)을 각각 구현했다.
1: a.B == null ? No
2: a.C == null ? No
3: a.D == null ? No
IoC/DI 정보
제어 반전(IoC: Inversion Of Control)이란 응용 프로그램 자체가 의존 대상의 창설과 유지보수를 책임지지 않고 외부 용기에 맡기는 것이다.이렇게 하면 제어권이 응용에서 외부 IoC 용기로 옮겨지고 제어권은 이른바 반전을 실현한다.예를 들어 유형 A에서 유형 B의 실례를 사용해야 하는데 B 실례의 생성은 A가 책임지지 않고 외부 용기를 통해 만들어진다.
때때로 우리는 IoC를 의존 주입(DI:Dependency Injection)으로 만듭니다.의존 주입이란 외부 용기가 운행할 때 의존 대상을 구성 요소에 동적으로 주입하는 것이다.구체적인 의존 주입 방식은 다음과 같은 세 가지 전형적인 형식을 포함한다.
구조자 주입(Constructor Injection): IoC 컨테이너는 의존하는 객체를 만들기 위해 적합한 구조 함수를 지능적으로 선택하고 호출합니다.선택한 구조 함수에 해당하는 매개 변수가 있으면 IoC 용기는 구조 함수를 호출하기 전에 해당하는 매개 변수 대상을 사용자 정의로 만들 수 있습니다
속성 주입(Property Injection): 의존 대상의 어떤 속성을 사용해야 한다면 의존 대상이 만들어진 후에 IoC 용기는 자동으로 이 속성을 초기화합니다
메소드 주입(Method Injection): 종속 객체가 해당 메소드를 호출하여 초기화할 경우 해당 객체가 작성되면 IoC 컨테이너가 자동으로 메소드를 호출합니다
개원 지역사회에서 매우 유행하는 IoC 프레임워크를 가지고 있는데 예를 들어 캐슬 윈도우, Unity, Spring이다.NET, StructureMap, Ninject 등.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Asp. net 코어 와 라 이브 러 리 에서 프로필 정 보 를 읽 습 니 다.config 를 읽 는 것 처럼 간단 하고 완벽 하지 않 은 것 같 습 니 다.마이크로소프트 가. Asp. net core 에서 프로필 을 읽 는 블 로 그 를 많이 봤 는데 문제 가 잘 해결 되 지 않 은 것 같 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.