Situation: J'ai une interface, commeWindsor Castle: Configuration XML Dynamic Proxy sans cible
public interface ITestClass
{
string StringElement { get; }
}
Il y a une mise en œuvre pour elle:
public class TestClassImplementor :
ITestClass
{
public string StringElement
{
get { return "AAA"; }
}
}
J'ai une usine cela crée une instance d'implémentation:
public class TestClassFactory
{
public ITestClass Create()
{
return new TestClassImplementor();
}
}
Je souhaite pouvoir olve l'implémentation en utilisant le fichier de configuration Castle Windsor (XML), mais en même temps ne pas configurer l'implémentation pour l'interface.
Pourquoi est-ce nécessaire: résoudre les services (Web). J'ai une interface de service (web), mais je n'ai pas accès à l'implémentation, comme c'est le cas sur un autre composant. Je veux être en mesure de taper simplement MyCastleUtility.Resolve<ITestClass>()
et obtenir un service Web préparé. Je veux utiliser le fichier de configuration de Castle Windsor (XML) pour configurer le service auquel j'essaie d'accéder.
Le problème: si je ne peux pas accéder à l'implémentation, je ne peux pas le configurer dans le fichier de configuration. Ce que j'ai essayé jusqu'à présent: 1) Usines.
<component id="mycompfactory"
type="MyTestProject.TestClassFactory, MyTestProject"/>
<component id="mycomp"
type="MyTestProject.ITestClass, MyTestProject"
factoryId="mycompfactory" factoryCreate="Create" />
je reçois le: Castle.MicroKernel.ComponentRegistrationException: Type MyTestProject.INewTestClass est abstraite. En tant que tel, il n'est pas possible de l'instancier en tant qu'exécution du service MyTestProject.INewTestClass
2) Proxies. Frappez le mur lorsque vous essayez de trouver un moyen de configurer ce "proxy doit être créé pour l'interface 'ITestClass'". Cible: configurez Castle Windsor pour créer une implémentation d'interface sans accéder directement à la classe qui implémente l'interface.
aide est très appréciée, Mindaugas
Que voulez-vous dire par « Je ne peux pas accéder à la mise en œuvre ". Pourquoi ne pouvez-vous pas y accéder? Avez-vous besoin d'utiliser XML? –
> Pourquoi ne pouvez-vous pas y accéder? Disons que nous avons deux services dans le système: Service1 et Service2. Service1 accède à Service2 via l'interface de service Web. Service1 utilise l'interface IService2 de Service2, car Service1 référence l'assembly Service2.Interfaces, mais il ne fait pas référence directement à l'assembly Service2.Application, où réside l'implémentation de l'interface IService2. C'est par conception et je pense que c'est correct. > Devez-vous utiliser XML? En général, oui. La configuration des composants est faite dans le XML et ne voudrait vraiment pas apporter une exception dans ce cas, c'est-à-direutilisez le code au lieu de XML. – Mindaugas