Inversion of control 如何强制Castle Windsor TypedFactory中缺少参数的运行时错误
我正在使用CastleWindsor及其TypedFacility功能 我有一个由大约50个类组成的组,这些类派生自一个抽象基类。它们都有自己的接口。在加载时,我将具体类注册到接口 TypedFacility中有几个接口:Inversion of control 如何强制Castle Windsor TypedFactory中缺少参数的运行时错误,inversion-of-control,castle-windsor,abstract-factory,Inversion Of Control,Castle Windsor,Abstract Factory,我正在使用CastleWindsor及其TypedFacility功能 我有一个由大约50个类组成的组,这些类派生自一个抽象基类。它们都有自己的接口。在加载时,我将具体类注册到接口 TypedFacility中有几个接口: T创建服务(字符串用户名) T创建 基类需要构造函数中的一个参数(用户名) 如果有人试图用create而不是CreateService创建一个需要用户名的类,我想显示一个运行时错误。还有什么我可以做的吗?你可以这样尝试: Component.For<ITypedFa
T创建服务(字符串用户名)
T创建
如果有人试图用create而不是CreateService创建一个需要用户名的类,我想显示一个运行时错误。还有什么我可以做的吗?你可以这样尝试:
Component.For<ITypedFactoryComponentSelector>().ImplementedBy<MyServicesTypedFactorySelector>(),
Component.For().ImplementedBy(),
在选择器中有类型和参数:
public class MyServicesTypedFactorySelector : ITypedFactoryComponentSelector
{
public Func<IKernelInternal, IReleasePolicy, object> SelectComponent(MethodInfo method, Type type, object[] arguments)
{
string username = arguments.Length > 0 ? (string)arguments[0] : null;
var parameterlessConstructor = theType.GetConstructor(Type.EmptyTypes);
//if there is no parameterless ctor and string.IsNullOrEmpty(username)
// throw InvalidOperationException($"no username provided for {type.GetName().Name}");
....
}
}
公共类MyServicesTypedFactorySelector:ITypedFactoryComponentSelector
{
public Func SelectComponent(MethodInfo方法、类型、对象[]参数)
{
字符串用户名=参数。长度>0?(字符串)参数[0]:null;
var parameterlessConstructor=Type.GetConstructor(Type.EmptyTypes);
//如果没有无参数的ctor和string.IsNullOrEmpty(用户名)
//抛出InvalidOperationException($“没有为{type.GetName().Name}提供用户名”);
....
}
}
您可以这样尝试:
Component.For<ITypedFactoryComponentSelector>().ImplementedBy<MyServicesTypedFactorySelector>(),
Component.For().ImplementedBy(),
在选择器中有类型和参数:
public class MyServicesTypedFactorySelector : ITypedFactoryComponentSelector
{
public Func<IKernelInternal, IReleasePolicy, object> SelectComponent(MethodInfo method, Type type, object[] arguments)
{
string username = arguments.Length > 0 ? (string)arguments[0] : null;
var parameterlessConstructor = theType.GetConstructor(Type.EmptyTypes);
//if there is no parameterless ctor and string.IsNullOrEmpty(username)
// throw InvalidOperationException($"no username provided for {type.GetName().Name}");
....
}
}
公共类MyServicesTypedFactorySelector:ITypedFactoryComponentSelector
{
public Func SelectComponent(MethodInfo方法、类型、对象[]参数)
{
字符串用户名=参数。长度>0?(字符串)参数[0]:null;
var parameterlessConstructor=Type.GetConstructor(Type.EmptyTypes);
//如果没有无参数的ctor和string.IsNullOrEmpty(用户名)
//抛出InvalidOperationException($“没有为{type.GetName().Name}提供用户名”);
....
}
}
当“有人试图创建类”时,您确定要“编译错误”吗?您可以尝试在两个接口后面创建两个TypedFactory,并避免这种情况。否则,您可以在FactoryMethod中执行。您确定在“有人试图创建类”时需要“编译错误”吗?您可以尝试在两个接口后面创建两个TypedFactory,并避免这种情况。否则,您可以在FactoryMethod中执行此操作。