Интерфейс зависит от того же типа интерфейса для выполнения некоторых определенных действий. Но когда я пытаюсь зарегистрировать его с единицей Я получаюUnity Self Dependent Interface Регистрация
необработанное исключение типа «System.StackOverflowException» произошло в Microsoft.Practices.Unity.DLL
Я думаю, что он падает в вид собственной референтной петли и заполняет память.
Есть ли что-то не так для моего подхода. Как это можно решить?
У меня такой интерфейс;
public interface IEnvironment
{
string RootUrl { get; set; }
string ImagesPath { get; set; }
IEnvironment DependentEnvironment { get; set; }
}
Это представление моей работающего кода среды, такие как Localhost, производство, Windows Phone Simulator и т.д ..
У меня есть два класса, реализующего это прямо сейчас;
class Localhost : IEnvironment
{
public string RootUrl { get; set; }
public string ImagesPath { get; set; }
public IEnvironment DependentEnvironment { get; set; }
public Localhost(IEnvironment dependentEnvironment)
{
ImagesPath = "images";
DependentEnvironment = dependentEnvironment;
}
}
и
public class WindowsPhoneSimulator : IEnvironment
{
public string RootUrl { get; set; }
public string ImagesPath { get; set; }
public IEnvironment DependentEnvironment { get; set; }
public WindowsPhoneSimulator(IEnvironment dependentEnvironment)
{
ImagesPath = "/Assets/images";
DependentEnvironment = dependentEnvironment;
}
}
так что среда может зависеть еще один? Зачем? Поскольку, например, WindowsPhoneSimulator может совершать вызовы api на localhost, и когда я развертываю приложение, я буду менять инъекцию как ProductionEnvironment. Поэтому он должен знать, какую среду вызывать.
Проблема начинается, когда я начинаю разрешать свои объекты:
IocContainer.RegisterType<IEnvironment, WindowsPhoneSimulator>();
любые предложения?
Возможно, вы захотите зарегистрировать всю среду как именованные экземпляры с зависимыми средами 'RegisterInstance' и вручную' Resolve'' ... возможно, вам понадобится использовать дочерние контейнеры.Вы должны подумать о том, что должно произойти, когда вы решите() '- Unity не может волшебным образом определить, что именно вы хотите в результате (я не уверен ни на одном из ваших вопросов), поэтому для этого потребуется некоторый уточнение (возможно, имя 'Resolve (« Телефон »)'). –