Service 棱镜&x2B;MEF:如何将参数正确加载到我的一个服务中?
基本上,我有以下场景: App.xaml.cs: MyBootstrapper.cs:Service 棱镜&x2B;MEF:如何将参数正确加载到我的一个服务中?,service,dependency-injection,prism,mef,Service,Dependency Injection,Prism,Mef,基本上,我有以下场景: App.xaml.cs: MyBootstrapper.cs: 如何将x和y正确加载到服务中?此外,我如何确保在执行此操作时不会与容器中的任何其他内容发生冲突?您不必使用StartupEventArgs。您的FooBarService可以这样简单地使用: [Export("FooBarService", typeof(IFooBarService))] public class FooBarService : IFooBarService { public vo
如何将x和y正确加载到服务中?此外,我如何确保在执行此操作时不会与容器中的任何其他内容发生冲突?您不必使用StartupEventArgs。您的FooBarService可以这样简单地使用:
[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]是第一个参数还是程序调用,您必须尝试一下,在这种情况下,开关会进一步索引 嗯,这是个好主意,但我唯一不喜欢的是它接管了使用它的应用程序的命令行。它强制应用程序处理前两个参数是为该服务保留的这一事实,如果其他服务也这样做,可能会导致冲突。然后呢?两个服务出于不同的原因为相同的args顺序而斗争。@michael那么,只需将抽象级别提高一级即可。创建一个CommandLineArgumentService,处理argumentorder和其他内容的所有细节。
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();
}
}
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; }
}
[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; }
}