2
基本的に私は次のシナリオを持っている:プリズム+ MEF:私のサービスに引数を適切に読み込むには?
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を正しくロードするにはどうすればよいですか?また、これを実行するときにコンテナやそのようなものと衝突しないようにするにはどうすればよいですか?
うーん、私はそれがそれを消費するアプリのコマンドラインを引き継ぐことが嫌い唯一のことを除いて、それは良いアイデアです。最初の2つの引数がこのサービス用に予約されているため、別のサービスが同じことを行った場合に衝突する可能性があります。じゃあ何? 2つのサービスは異なる理由でargsの同じ順序で戦っています。 – michael
@michaelそれでは、ちょうど1レベル高い抽象化を行います。 argumentorderとstuffのすべての詳細を処理するCommandLineArgumentServiceを作成します。 –