Если вы оставите файл Realm в каталоге Documents, то, если пользователь выполнит резервное копирование iCloud или iTunes, файл будет скопирован. Однако все это означает, что если пользователь решит перейти на новое устройство и выполнить восстановление с использованием образа резервной копии старого устройства, тогда файл Realm будет восстановлен. Если пользователь удалит приложение со старого устройства до этого, резервная копия iCloud также будет удалена и файл Realm.
[Обновление] Это является теперь возможным в Виндзоре 2.1 или более новым. См. документацию для синтаксиса здесь.
Эта опция не была реализована в интерпретаторе XML на данный момент.. однако не трудно добавить поддержку его через средство (очевидно, эта техника также полезна, желая добавить другие опции, отсутствующие в существующем синтаксическом анализаторе конфигурации).
Так прежде всего мы добавляем средство, которое обнаружит, когда обработчик будет создан для типа, и в то же время зарегистрирует любой из переданных сервисов, таким образом, они указывают на существующий обработчик:
public class HandlerForwardingFacility : AbstractFacility
{
IConversionManager conversionManager;
protected override void Init()
{
conversionManager = (IConversionManager)Kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey);
Kernel.HandlerRegistered += new HandlerDelegate(Kernel_HandlerRegistered);
}
void Kernel_HandlerRegistered(IHandler handler, ref bool stateChanged)
{
if (handler is ForwardingHandler) return;
var model = handler.ComponentModel;
if (model.Configuration == null) return;
var forward = model.Configuration.Children["forward"];
if (forward == null) return;
foreach (var service in forward.Children)
{
Type forwardedType = (Type)conversionManager.PerformConversion(service, typeof (Type));
Kernel.RegisterHandlerForwarding(forwardedType, model.Name);
}
}
}
И затем конечно, мы должны использовать это в коде для этого примера, я собираюсь иметь компонент утки/собаки мутанта, который поддерживает два отдельных сервиса - IDuck и IDog:
public interface IDog
{
void Bark();
}
public interface IDuck
{
void Quack();
}
public class Mutant : IDog, IDuck
{
public void Bark()
{
Console.WriteLine("Bark");
}
public void Quack()
{
Console.WriteLine("Quack");
}
}
Теперь на самом деле настраивать контейнер:
<castle>
<facilities>
<facility id="facility.handlerForwarding" type="Example.Facilities.HandlerForwardingFacility, Example" />
</facilities>
<components>
<component id="mutant" service="Example.IDog, Example" type="Example.Mutant, Example">
<forward>
<service>Example.IDuck, Example</service>
</forward>
</component>
</components>
</castle>
И теперь мы можем счастливо выполнить тест как это:
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
var dog = container.Resolve<IDog>();
var duck = container.Resolve<IDuck>();
Assert.AreSame(dog, duck);
Надеюсь, это поможет.