我正在将DNX项目转换为.net核心。由于依赖项更改,我不能再使用System.ComponentModel.Composition
,而必须使用.net core的移植版本System.Composition
(我相信它被称为MEF 2)。
但是我在MEF2中找不到用于为单身设置CreationPolicy
的等效功能。
在MEF1中,代码是
[PartCreationPolicy(CreationPolicy.Shared)]
你怎么能在MEF2中做到这一点?
答案 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();