Можно ли зарегистрировать существующий экземпляр типа в Виндзорском Контейнере?

Как предложил Питер Кордес, я представляю данные как шестнадцатеричные значения:

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 на диаграмме, сами не имеют имени регистра.)

12
задан Chris 26 September 2008 в 19:22
поделиться

1 ответ

На свойстве 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);
}
13
ответ дан 2 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: