I know there have been lot of questions regarding constructor parameter injection using MEF, but mine is a bit different.
I want to know that is there any way to pass different parameter values to the constructor of a part when I am using the combination of PartCreationPolicy(CreationPolicy.NonShared)
and GetExportedValue
?
For example:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public partial class Foo
{
[ImportingConstructor]
public Foo([Import("SomeParam")]object parameter)
{
...
}
}
and somewhere else...
container.ComposeExportedValue("SomeParam", "Some value...");
var instance = container.GetExportedValue<Foo>();
In the above example, I can use ComposeExportedValue
only once, as running it a second time will cause a ChangeRejectedException
.
So, my questions are:
- Is there any other way to change the value of
SomeParam
in the above scenario, for each new instance? - If not, what are the other ways this can be accomplished without using any other DI framework? One thing which comes to mind is to create a service to expose something like
System.Collections.Concurrent.ConcurrentQueue
where I enqueue a parameter value before callingGetExportedValue
and then dequeue the value in the constructor of the part. But that is a hack and also creates more issues than it solves. - If the answer to both the above questions is no, then are there any other ways to accomplish this with a combination of MEF and some other DI/IOC framework?
Thanks for any help. :)
Regards,
Yogesh Jagota
RegisterComposablePartCatalog
? I can't useRegister
here as it is done by AutoFac automatically. How can I tell AutoFac that a certain export needs to be instantiated using a non default constructor with parameters I supply without using the[ImportingConstructor]
? – Margarine