Castle Windsor: конфигурация XML для динамического прокси без цели - PullRequest
2 голосов
/ 12 августа 2010

Положение: У меня есть интерфейс, например

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 для создания реализации интерфейса без прямого доступа к классу, который реализует интерфейс.

Помощь очень ценится, Миндаугас

1 Ответ

1 голос
/ 12 августа 2010

Для заводского подхода:

  1. Вы также настраивали FactoryFacility в своей конфигурации?

  2. В вашем "mycomp", я думаюВы хотите использовать «сервис», а не «тип»:

<component id="mycomp" service="MyTestProject.ITestClass, MyTestProject" factoryId="mycompfactory" factoryCreate="Create" />

...