[Export]
public class MyViewModel : NotificationObject
{
public MyViewModel(Foo foo)
{
DoWorkCommand = new DelegateCommand(DoWork);
MyFoo = foo;
}
[Import]
private IBarService MyBarService { get; set; }
public Foo MyFoo { get; private set; }
public DelegateCommand DoWorkCommand { get; set; }
public void DoWork()
{
MyBarService.DoSomething(MyFoo);
}
}
如何在能够传入参数的同时获取MyViewModel类的实例?我想也许ExportFactor<T>
会让我传递一些参数,但事实并非如此。那么,是否有一些模式可以解释我希望实现的目标?
简单地执行new()不会删除它,因为MyBarService
保持为null。我考虑删除ExportAttribute
并使用ComponentInitializer.SatisfyImports(this)
,这让我使用new(),但这样做是因为我必须使用new()所有内容。我有点希望两全其美...有某种方式来导入带参数的东西。这样我仍然可以解耦,但能够使用参数设置生成我的ViewModel实例。
答案 0 :(得分:0)
MEF支持依赖注入,例如,我可以这样做:
[ImportingConstructor]
public MyViewModel(Foo foo)
{
}
MEF会自动尝试将Foo
的实例注入我的构造函数中。也许你可以使用这种机制将所需的服务注入你的组成部分?
答案 1 :(得分:0)
如果要将某些参数从导入器传递到导出器,则可以在要导出的类或接口上放置Initialize方法。像这样:
[Export]
public class MyViewModel : NotificationObject
{
public MyViewModel()
{
DoWorkCommand = new DelegateCommand(DoWork);
}
public void Initialize(Foo foo)
{
MyFoo = foo;
}
[Import]
private IBarService MyBarService { get; set; }
public Foo MyFoo { get; private set; }
public DelegateCommand DoWorkCommand { get; set; }
public void DoWork()
{
MyBarService.DoSomething(MyFoo);
}
}
然后在导入端使用ExportFactory
,并在创建新的导出实例后调用Initialize
方法。