首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MEF的模板10依赖注入

使用MEF的模板10依赖注入
EN

Stack Overflow用户
提问于 2017-01-19 23:25:31
回答 2查看 124关注 0票数 0

我熟悉在.NET Framework4.6.*中使用MEF,但在.NET核心中不熟悉。我正在摆弄模板10中的汉堡包模板,看看它是否适合我的需要,但我还不能弄清楚如何使用MEF来构建我的视图模型。

我的问题是,我如何使用导航服务导航到视图,以使其视图模型将由MEF注入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 01:43:08

我的错,我没有注意到这个:

How do I use a Unity IoC container with Template10?

最后,我选择了这样的解决方案:

代码语言:javascript
运行
复制
public interface IView
{
    ViewModelBase ViewModel { get; }
}

[Export]
public sealed partial class MainPage : Page, IView
{
    public ViewModelBase ViewModel
    {
        get
        {
            return VM as ViewModelBase;
        }
    }

    [Import]
    public MainPageViewModel VM { get; set; }

    public MainPage()
    {
        InitializeComponent();
        NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
    }
}

在App.xaml.cs中:

代码语言:javascript
运行
复制
public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
    {
        var config = new ContainerConfiguration();
        _container = config.WithAssembly(GetType().GetTypeInfo().Assembly).CreateContainer();
        await NavigationService.NavigateAsync(typeof(Views.MainPage));
    }       

    public override INavigable ResolveForPage(Page page, NavigationService navigationService)
    {
        _container.SatisfyImports(page);
        return (page as IView)?.ViewModel;
    }
票数 0
EN

Stack Overflow用户

发布于 2017-01-20 22:52:45

我有一种方法可以让它工作,但它似乎有点代码臭味,所以欢迎更好的答案。我创建了一个包含CompositionHost实例的静态类。它有一个解析导入的方法。视图的代码幕后调用静态类来创建其视图模型。

代码语言:javascript
运行
复制
public static class Container
{
    public static CompositionHost Host { get; set; }

    public static T Get<T>()
    {
        T obj = Host.GetExport<T>();
        Host.SatisfyImports(obj);
        return obj;
    }
}

App类中:

代码语言:javascript
运行
复制
public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
    {
        var config = new ContainerConfiguration();
        Container.Host = config.WithAssembly(GetType().GetTypeInfo().Assembly).CreateContainer();

        await NavigationService.NavigateAsync(typeof(Views.MainPage));
    }

在视图背后的代码中:

代码语言:javascript
运行
复制
public sealed partial class MainPage : Page
{
    private MainPageViewModel ViewModel { get; }

    public MainPage()
    {
        InitializeComponent();
        NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
        ViewModel = Container.Get<MainPageViewModel>();
        DataContext = ViewModel;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41745561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档