.NET Framework
관리 확장 성 프레임 워크
수색…
비고
제어 패턴 반전을 지원하는 다른 기술에 비해 MEF의 큰 장점 중 하나는 구성을 많이 필요로하지 않고도 디자인 타임에 알려지지 않은 종속성을 해결할 수 있다는 것입니다.
모든 예제에는 System.ComponentModel.Composition 어셈블리에 대한 참조가 필요합니다.
또한 모든 (기본) 예제는이를 샘플 비즈니스 오브젝트로 사용합니다.
using System.Collections.ObjectModel;
namespace Demo
{
public sealed class User
{
public User(int id, string name)
{
this.Id = id;
this.Name = name;
}
public int Id { get; }
public string Name { get; }
public override string ToString() => $"User[Id: {this.Id}, Name={this.Name}]";
}
public interface IUserProvider
{
ReadOnlyCollection<User> GetAllUsers();
}
}
유형 내보내기 (기본)
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.Composition;
namespace Demo
{
[Export(typeof(IUserProvider))]
public sealed class UserProvider : IUserProvider
{
public ReadOnlyCollection<User> GetAllUsers()
{
return new List<User>
{
new User(0, "admin"),
new User(1, "Dennis"),
new User(2, "Samantha"),
}.AsReadOnly();
}
}
}
이것은 어디에서나 정의 할 수 있습니다. 중요한 것은 응용 프로그램이 어디서 찾아야하는지 (응용 프로그램이 만드는 ComposablePartCatalog를 통해) 알 수 있다는 것입니다.
가져 오기 (기본)
using System;
using System.ComponentModel.Composition;
namespace Demo
{
public sealed class UserWriter
{
[Import(typeof(IUserProvider))]
private IUserProvider userProvider;
public void PrintAllUsers()
{
foreach (User user in this.userProvider.GetAllUsers())
{
Console.WriteLine(user);
}
}
}
}
이것은 어디에서나 정의 할 수있는 IUserProvider
에 대한 종속성이있는 유형입니다. 앞의 예제와 마찬가지로 중요한 것은 애플리케이션이 일치하는 내보내기를 찾는 위치를 애플리케이션이 (생성하는 ComposablePartCatalog를 통해) 어디에서 알 수 있는지입니다.
연결 (기본)
위의 다른 (기본) 예제를 참조하십시오.
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace Demo
{
public static class Program
{
public static void Main()
{
using (var catalog = new ApplicationCatalog())
using (var exportProvider = new CatalogExportProvider(catalog))
using (var container = new CompositionContainer(exportProvider))
{
exportProvider.SourceProvider = container;
UserWriter writer = new UserWriter();
// at this point, writer's userProvider field is null
container.ComposeParts(writer);
// now, it should be non-null (or an exception will be thrown).
writer.PrintAllUsers();
}
}
}
}
응용 프로그램의 어셈블리 검색 경로에있는 항목에 [Export(typeof(IUserProvider))]
가 있으면 UserWriter
의 해당 가져 오기가 충족되고 사용자가 인쇄됩니다.
다른 유형의 카탈로그 (예 : DirectoryCatalog
)는 ApplicationCatalog
대신 (또는 그에 추가하여) 가져 오기를 충족시키는 내보내기를 다른 곳에서 찾기 위해 사용할 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow