Как предложил Питер Кордес, я представляю данные как шестнадцатеричные значения:
RR RR RR RR EE EE HH LL
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
... где RAX
- 64-битный регистр, который существует в x86-64
.
Итак, если у вас были AH = 0x12
и AL = 0x34
, вот так:
00 00 00 00 00 00 12 34
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
... тогда у вас были AX = 0x1234
и EAX = 0x00001234
и т. д.
Обратите внимание, что, как показано на этой диаграмме, AH
является единственным «странным» регистром, который не согласован с нижними битами. Остальные (AL
, AX
, EAX
, RAX
для 64-битных) имеют разные размеры, но все выровнены справа. (Например, два байта, отмеченные EE EE
на диаграмме, сами не имеют имени регистра.)
На свойстве Container's Kernel существует метод AddComponentInstance.
От модульных тестов:
[Test]
public void AddComponentInstance()
{
CustomerImpl customer = new CustomerImpl();
kernel.AddComponentInstance("key", typeof(ICustomer), customer);
Assert.IsTrue(kernel.HasComponent("key"));
CustomerImpl customer2 = kernel["key"] as CustomerImpl;
Assert.AreSame(customer, customer2);
customer2 = kernel[typeof(ICustomer)] as CustomerImpl;
Assert.AreSame(customer, customer2);
}
[Test]
public void AddComponentInstance_ByService()
{
CustomerImpl customer = new CustomerImpl();
kernel.AddComponentInstance <ICustomer>(customer);
Assert.AreSame(kernel[typeof(ICustomer)],customer);
}
[Test]
public void AddComponentInstance2()
{
CustomerImpl customer = new CustomerImpl();
kernel.AddComponentInstance("key", customer);
Assert.IsTrue(kernel.HasComponent("key"));
CustomerImpl customer2 = kernel["key"] as CustomerImpl;
Assert.AreSame(customer, customer2);
customer2 = kernel[typeof(CustomerImpl)] as CustomerImpl;
Assert.AreSame(customer, customer2);
}