Prism + MEF: Как правильно загрузить аргументы в один из моих сервисов? - PullRequest
2 голосов
/ 08 марта 2011

В основном у меня есть следующий сценарий:

App.xaml.cs:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    string x = (e.Args.Length > 0) ? e.Args[0];
    string y = (e.Args.Length > 1) ? e.Args[1];

    Bootstrapper bootstrapper = new MyBootstrapper(x, y);
    bootstrapper.Run();
}

MyBootstrapper.cs:

public sealed class MyBootstrapper : MefBootstrapper
{
    private string _x;
    private string _y;

    public MyBootstrapper(string x, string y)
    {
        _x = x;
        _y = y;
    }

    protected override void ConfigureAggregateCatalog()
    {
        base.ConfigureAggregateCatalog();

        AggregateCatalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
    }

    protected override DependencyObject CreateShell()
    {
        return Container.GetExportedValue<ClientShell>();
    }

    protected override void InitializeShell()
    {
        base.InitializeShell();

        Application.Current.MainWindow = (Window)Shell;
        Application.Current.MainWindow.Show();
    }
}

FooBarService.cs

public interface IFooBarService
{
    string x { get; }
    string y { get; }
}

[Export("FooBarService", typeof(IFooBarService))]
public class FooBarService : IFooBarService
{
    string x { get; protected set; }
    string y { get; protected set; }
}

Как правильно загрузить x и y в мой сервис? Кроме того, как мне обеспечить, чтобы при этом он не сталкивался ни с чем другим в моем контейнере или чем-то подобным?

1 Ответ

1 голос
/ 16 марта 2011

Вам не нужно использовать StartupEventArgs. Ваш FooBarService может просто использовать Environment.GetCommandLineArgs следующим образом:

[Export("FooBarService", typeof(IFooBarService))]
public class FooBarService : IFooBarService
{
    public void FooBarService()
    {
        var args = Environment.GetCommandLineArgs();
        x = (args.Length > 0) ? args[0]:"";
        y = (args.Length > 1) ? args[1]:"";
    }
    string x { get; protected set; }
    string y { get; protected set; }
}

РЕДАКТИРОВАТЬ : Я не уверен, является ли args [0] первым параметром или вызовом программы, вы должны попробовать это, и в этом случае переключатель индексирует еще один!

...