- 我有一个
Interface
,它在启动时从本地Json
文件中获取数据(反序列化(此接口注入了3个功能 - 使用
Contextual Name Binding
,所有3个功能都能正常运行,正如我所期望的那样,使用来自本地json文件的3个不同的设备配置 - 当我想让我的
MainView
显示所有3个设备的设置时,我必须获取所有3个绑定,并将它们注入MainViewModel
中,如下代码所示 - 问题是
MainViewModel
没有从内核得到任何东西,因为我在绑定DeviceConfig时使用了.WhenParentNamed(devicename)
,当我删除它时,内核确实在数组中返回了3个实例 - 我想知道是否有任何方法可以在不删除
WhenParentNamed
上下文绑定的情况下获得所有DeviceConfig实例。这是我的第一个在线问题,很抱歉我的英语不好,谢谢你的阅读
public interface IDeviceConfig
{
int Param1 {get;set;}
int Param2 {get;set;}
...
}
internal class DeviceConfig : IDeviceConfig
{
int Param1
{
}
int Param2
{
}
...
}
public sealed partial class App : Application
{
var kernel = new StandardKernel();
var AllDevices = GetDeviceConfigFromJson();
if (AllDevices.Count > 0)
{
for (var i = 0; i < AllDevices.Count; i++)
{
var devicename = i.ToString();
kernel.Bind<IDeviceConfig>().ToConstant(AllDevices.ElementAt(i)).WhenParentNamed(devicename);
kernel.Bind<IFeature1>().To<Feature1>().Named(devicename);
kernel.Bind<IFeature2>().To<Feature2>().Named(devicename);
kernel.Bind<IFeature3>().To<Feature3>().Named(devicename);
//Each device has 3 features and all 3 features get property from DeviceConfig
//on startup all device get config and run
kernel.Get<IFeature1>(devicename);
kernel.Get<IFeature2>(devicename);
kernel.Get<IFeature3>(devicename);
}
}
kernel.Bind<MainViewModel>.ToSelf();
Current.MainWindow = kernel.Get<MainView>();
Current.MainWindow.Show();
}
public MainViewViewModel(IDeviceConfig[] devices)
{
ShowAllDevices(devices); // Mainview Binding Xaml to each Device's Config
}
我找到了一个丑陋的方法,但它有效!
kernel.Bind<IDeviceConfig>.ToConstant(AllDevices.ElementAt(i)).Named(devicename);
kernel.Bind<IFeature1>().To<Feature1>().InSingletonScope().WithConstructorArgument("config", kernel.Get<IDeviceConfig>(devicename))Named(devicename);
var feature1 = kernel.Get<IFeature1>(devicename);