情况: 我有一个界面,比如
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)解析实现,但同时不配置接口的实现。
为什么需要:解析(网络)服务。我有一个(Web)服务接口,但我不访问该实现,因为它在另一个组件上。我希望能够简单地键入MyCastleUtility.Resolve<ITestClass>()
并获得准备好的Web服务。我想使用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以创建接口实现,而无需直接访问实现接口的类。
非常感谢帮助, 加斯
答案 0 :(得分:1)
对于工厂方法:
您是否还在配置中配置了FactoryFacility?
在你的“mycomp”中,我认为你想要使用“服务”而不是“打字”:
<component id="mycomp" service="MyTestProject.ITestClass, MyTestProject" factoryId="mycompfactory" factoryCreate="Create" />