Положение:
У меня есть интерфейс, например
public interface ITestClass
{
string StringElement { get; }
}
Для этого есть реализация:
public class TestClassImplementor :
ITestClass
{
public string StringElement
{
get { return "AAA"; }
}
}
У меня есть фабрика, которая создает экземпляр реализации:
public class TestClassFactory
{
public ITestClass Create()
{
return new TestClassImplementor();
}
}
Я хочу иметь возможность разрешить реализацию, используя файл конфигурации Castle Windsor (XML), но в то же время не настраивая реализацию для интерфейса.
Зачем это нужно: разрешение (веб) сервисов. У меня есть (веб) интерфейс службы, но я не получаю доступ к реализации, так как это на другом компоненте. Я хочу иметь возможность просто набрать MyCastleUtility.Resolve<ITestClass>()
и получить готовый веб-сервис. Я хочу использовать файл конфигурации Castle Windsor (XML) для настройки службы, к которой я пытаюсь получить доступ.
Проблема: если я не могу получить доступ к реализации, я не могу настроить ее в файле конфигурации.
Что я пробовал до сих пор:
1) Фабрики.
<component id="mycompfactory"
type="MyTestProject.TestClassFactory, MyTestProject"/>
<component id="mycomp"
type="MyTestProject.ITestClass, MyTestProject"
factoryId="mycompfactory" factoryCreate="Create" />
Я получаю:
Castle.MicroKernel.ComponentRegistrationException: Тип MyTestProject.INewTestClass является абстрактным. Таким образом, невозможно реализовать его как реализацию службы MyTestProject.INewTestClass
2) Прокси. Прыгните в стену, когда попытаетесь найти способ настроить «прокси должен быть создан для интерфейса« ITestClass »».
Цель: настроить Castle Windsor для создания реализации интерфейса без прямого доступа к классу, который реализует интерфейс.
Помощь очень ценится,
Миндаугас