Autofac在注册像这样的组件
时找到“最佳”ctorbuilder.RegisterType<MyType>()...;
or
builder.RegisterType(typeof(MyType))...;
我正在寻找一种方法来重用Autofac的反射代码来查找ctor参数。这个逻辑在某些公共API中是否可用?
我想要的原因......
我在编译时有一些未知类型的组件(=动态代理)。目前我像这样注册
builder.Register(c =>
{
var dep1 = c.Resolve<IFoo>();
var dep2 = c.Resolve<IBar>();
var dep3 = c.Resolve<IFooBar>();
return someProxyFactory.CreateProxyFrom<MyType>(dep1, dep2, dep3);
}...;
--- 修改 ---
如果不涉及代理但是不能使用RegisterType时,同样的问题是有效的。例如...
builder.Register(c =>
{
[...]
if(something)
return new SomeType(dep1, dep2, dep3);
else
return new SomeOtherType(dep1, dep4, dep2, dep5);
}
如果可能的话,我还想重复使用Autofac的“查找逻辑”。
--- 结束编辑 ---
它运行正常但是,如果可能的话,我想使用autofac的逻辑来为我找到ctor依赖项。我想写点像
builder.Register(c =>
{
object[] ctorDependencies = letAutofacDoTheSimilarWorkAsInRegisterType(typeof(MyType));
return someProxyFactory.Create<MyType>(ctorDependencies);
}
这是可能的还是我必须为此编写自己的逻辑?或者是一种完全不同的方法可用于这种情况?
答案 0 :(得分:0)
我猜不到你的回答,但是你可以使用the existing DynamicProxy2吗?这使您可以将拦截器附加到已注册的接口,就像您在代理工厂中所做的那样。
更新:您可以使用Autofac.Core.Activators.Reflection命名空间中的IConstructorFinder
和IConstructorSelector
接口,由PublicConstructorFinder
和{分别为{1}}。