如何在.net-core中设置CreationPolicy单例System.Composition(Mef)

时间:2017-08-28 23:15:38

标签: c# .net-core mef dnx mef2

我正在将DNX项目转换为.net核心。由于依赖项更改,我不能再使用System.ComponentModel.Composition,而必须使用.net core的移植版本System.Composition(我相信它被称为MEF 2)。

但是我在MEF2中找不到用于为单身设置CreationPolicy的等效功能。 在MEF1中,代码是

[PartCreationPolicy(CreationPolicy.Shared)]

你怎么能在MEF2中做到这一点?

2 个答案:

答案 0 :(得分:2)

自从没有收到答案后回答自己,虽然没有很好的答案。

阅读多个帖子,似乎默认的CreationPolicy是共享的,也就是单身。所以可能只是删除这一行就可以了。

MEF2引入了导出工厂,可以查看以获取有关策略设置的更多详细信息。

答案 1 :(得分:1)

解决方案是使用ConventionBuilder类。

假设有一个名为#include <iostream> #include <vector> #include <optional> #include <algorithm> template<typename T> std::ostream& operator<<(std::ostream & os, const std::vector<std::optional<T>> & vec) { for (auto & el : vec) { if (el) os << *el << ' '; else os << " "; } return os << '\n'; } int main() { std::vector<std::optional<int>> vals = { 1, 2, 3, 4, 5, 6, 7 }; std::cout << vals; *std::find(vals.begin(), vals.end(), 5) = std::nullopt; *std::find(vals.begin(), vals.end(), 6) = std::nullopt; std::cout << vals; return 0; } 的类,它实现了接口AppShell。为了以共享模式导出它,请执行以下步骤:

IAppShell

然后:

var conventionBuilder = new ConventionBuilder();
conventionBuilder.ForTypesDerivedFrom<IAppShell>()
    .Export<AppShell>()
    .Shared();