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 개의 인수가이 서비스 용으로 예약되어있어 다른 서비스가 동일하게 수행하면 충돌을 일으킬 수 있다는 사실을 앱이 강제로 처리합니다. 그리고 뭐? 두 가지 서비스가 다른 이유로 args의 동일한 순서로 싸우고 있습니다. – michael
@michael 그럼 추상화를 한 단계 더 높이십시오. argumentsorder 및 내용에 대한 모든 세부 정보를 처리하는 CommandLineArgumentService를 만듭니다. –