以构造函数作为类型契约的 MEF 通用类

发布于 2024-09-04 07:41:30 字数 606 浏览 2 评论 0原文

我有一个泛型类,它使用 TBase 作为类型参数。使用 MEF,我想要一个应该导入的通用类型列表。我尝试使用这个:

1)

[ImportMany(typeof(TBase))]
public List<TBase> ObjectList { get; set; }

2)  
Type IValueType = typeof(TBase)

[ImportMany(IValueType)]
public List<TBase> ObjectList{ get; set; }

3)
[ImportMany(TBase)]
public List<TBase> ObjectList{ get; set; }

第一个节目
{'TBase':属性参数不能使用类型参数}

第二个显示
{非静态字段、方法或属性需要对象引用}

第三个显示
{'TBase' 是一个“类型参数”,但像“变量”一样使用}

我在这里做错了什么?我该如何修复它?

I have a generics class, that uses TBase as the type parameter. Using MEF, I wanted a list of Generic Type that it should Import. I tried to use this :

1)

[ImportMany(typeof(TBase))]
public List<TBase> ObjectList { get; set; }

2)  
Type IValueType = typeof(TBase)

[ImportMany(IValueType)]
public List<TBase> ObjectList{ get; set; }

3)
[ImportMany(TBase)]
public List<TBase> ObjectList{ get; set; }

The first Shows
{'TBase': an attribute argument cannot use type parameters}

The second Shows
{An object reference is required for the non-static field, method, or property}

The third Shows
{'TBase' is a 'type parameter' but is used like a 'variable'}

What am I Doing wrong here? How can I Fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白云悠悠 2024-09-11 07:41:30

尝试 以下语法

[ImportMany]
public IEnumerable<TBase> ObjectList{ get; set; }

编辑第一个语法应作为[ImportMany(typeof(TBase))] 是一个合法的声明,并且ImportMany 确实接受其构造函数的类型/

Try the following syntax:

[ImportMany]
public IEnumerable<TBase> ObjectList{ get; set; }

EDIT The first syntax should work as [ImportMany(typeof(TBase))] is a legal statement and ImportMany does take a type in of its constructors/

江心雾 2024-09-11 07:41:30

MEF 需要可以在编译时转换为常量字符串的参数。
由于您使用的是通用的 TBase,并且只能在运行时实现,因此无法生成 MEF 元数据。
尝试使用非泛型接口而不是泛型类型 TBASE。

MEF requires arguments that can be converted to constant strings at compile time.
Since you are using TBase that is generic and can be realized only at runtime, MEF metadata can't be produced.
Try using a non generic interface instead of the generic type TBASE.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文