【问题标题】:Import allways returns null, but ImportConstructor worksImport 总是返回 null,但 Import Constructor 有效
【发布时间】:2011-06-30 08:15:27
【问题描述】:

我正在尝试在我的应用程序中使用 MEF,但导入时遇到问题。

    [Import (typeof(IUserServices ))]
    public IUserServices UserService { get; private set; }

这不起作用,并且 UserService 始终为空。

但是在同一个类中使用 ImportContstructor 效果很好:

    [ImportingConstructor ]
    public MainWindowVM(
        IUIVisualizerService uiVisualizer,
        IViewAwareStatus viewAwareStatus,
        IMessageBoxService messageBoxService, 
        IManager mwManager,
        TagItemModel tagModel,
        ILibraryModel  documentModel,
        ILibraryServices libraryServices,
        ILogServices logServices ,
        IUserServices userServices)

任何人都可以帮助我解决这个问题。我已经花了几个小时,但没有找到任何解决方案。谢谢!!!

【问题讨论】:

  • 你能添加你的代码来演示你的容器创建,以及你是如何尝试满足导入的吗?
  • 我正在使用 ChinchV2 和 MefedMVVM 来创建容器。这里提供导出的代码: [PartCreationPolicy(CreationPolicy.Shared)] [Export (typeof(IUserServices ))] public class TestUserServices:IUserServices { public void GetSettings(Action callback) { var dPath = Path. GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Remove(0, 6);回调(新 HubSettings {DataPath = dPath},空); } }
  • 我最好的猜测是这是 MefedMVVM 的问题。你确定它应该支持属性导入吗?
  • MefedMVVM 基于 MEF。是否有任何理由或技术背景,不应该支持属性导入?

标签: c# mef mefedmvvm


【解决方案1】:

该属性只会在构造函数完全执行后由 MEF 设置。你什么时候检查属性是否为空?

【讨论】:

  • 就是这样。我总是在初始化期间检查。非常感谢!
【解决方案2】:

我正在使用 ChinchV2 和 MefedMVVM 来创建容器。 这里是提供导出的代码:

[PartCreationPolicy(CreationPolicy.Shared)]
[Export (typeof(IUserServices ))]
public class TestUserServices:IUserServices 
{
    public void GetSettings(Action<HubSettings, Exception> callback)
    {
        var dPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Remove(0, 6);
        callback(new HubSettings {DataPath = dPath}, null);
    }
}

【讨论】:

  • CTRL+K 或单击编辑器格式代码上方的{} 图标!欢迎来到 SO!
猜你喜欢
  • 2020-05-31
  • 2017-02-20
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2013-08-17
  • 2021-11-01
相关资源
最近更新 更多