Yog*_*esh 10 c# dependency-injection mef inversion-of-control
我知道有很多关于使用MEF的构造函数参数注入的问题,但我的有点不同.
我想知道,有没有什么办法,以不同的参数值传递给当我使用的组合部分的构造PartCreationPolicy(CreationPolicy.NonShared)
和GetExportedValue
?
例如:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public partial class Foo
{
[ImportingConstructor]
public Foo([Import("SomeParam")]object parameter)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
和其他地方......
container.ComposeExportedValue("SomeParam", "Some value...");
var instance = container.GetExportedValue<Foo>();
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我只能使用ComposeExportedValue
一次,因为第二次运行会导致a ChangeRejectedException
.
所以,我的问题是:
SomeParam
对于每个新实例,还有其他方法可以更改上述场景中的值吗?System.Collections.Concurrent.ConcurrentQueue
我在调用之前将参数值排入队列GetExportedValue
,然后在部件的构造函数中将值取列.但这是一个黑客攻击,也会产生比它解决的问题更多的问题.谢谢你的帮助.:)
问候,
Yogesh Jagota
如果上述两个问题的答案是否定的,那么是否有其他方法可以结合 MEF 和其他 DI/IOC 框架来实现此目的?
我认为问题1和2的答案确实是否定的。
我会尝试AutoFac,它为您提供更细粒度的控制并与 MEF 集成。例如,它允许您像这样设置注册,以便Bar
实例使用不同的参数Baz
获取其实例:Foo
builder.Register(c => new Bar(new Foo(param));
builder.Register(c => new Baz(new Foo(param2));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6372 次 |
最近记录: |