Ai đó có thể giải thích sự khác biệt giữa SatisfyImportsOnce
và ComposeParts
và tại sao một người sẽ làm việc ở nơi khác không?SatisfyImportsOnce vs ComposeParts
Cụ thể tôi có ứng dụng Web MVC mà tôi đang sử dụng MEF. Dưới đây là một số mã (từ ứng dụng đó) hoạt động khi tôi sử dụng SatisfyImportsOnce
nhưng không sử dụng khi tôi sử dụng ComposeParts
. Hiểu biết của tôi là ComposeParts
tạo các bộ phận có thể ghép từ một mảng các đối tượng được phân bổ và soạn chúng trong thùng chứa thành phần được chỉ định và rằng SatisfyImportsOnce
soạn phần được chỉ định bằng cách sử dụng dịch vụ thành phần được chỉ định. Với bộ não khỉ đơn giản của tôi mặc dù tiếng Anh khác nhau nhưng chúng giống nhau về mặt ngữ nghĩa. Cả hai đều sử dụng CompositionContainer
để nhổ các loại được xuất tại mục tiêu nhập.
public class FormPartCustomatorFactory
{
[ImportMany(typeof(ICustomRenderer), AllowRecomposition = true)]
private readonly List<Lazy<ICustomRenderer, ICustomRendererMetaData>> _rendererImports = new List<Lazy<ICustomRenderer, ICustomRendererMetaData>>();
private readonly Dictionary<string, Lazy<ICustomRenderer, ICustomRendererMetaData>> _renderers;
public static readonly FormPartCustomatorFactory Instance = new FormPartCustomatorFactory();
static CompositionContainer _container;
private FormPartCustomatorFactory()
{
using (var catalog = new DirectoryCatalog(HttpRuntime.BinDirectory, "*.dll"))
{
_container = new CompositionContainer(catalog);
_container.SatisfyImportsOnce(this); // <- Works
// _container.ComposeParts(this); // DOESN'T Work
_renderers = _rendererImports.ToDictionary(q => q.Metadata.Name, q => q);
}
}
~FormPartCustomatorFactory()
{
_container.Dispose();
}
public static ICustomRenderer Find(string name)
{
return Instance._renderers[name].Value;
}
}
Cảm ơn bạn, đây là một câu trả lời tuyệt vời. – Peter