這應做到:
builder.RegisterType<C1>();
builder.RegisterType<C2>();
builder.RegisterModule(new ExposeRequestorTypeModule());
其中:
class ExposeRequestorTypeModule : Autofac.Module
{
Parameter _exposeRequestorTypeParameter = new ResolvedParameter(
(pi, c) => c.IsRegistered(pi.ParameterType),
(pi, c) => c.Resolve(
pi.ParameterType,
TypedParameter.From(pi.Member.DeclaringType)));
protected override void AttachToComponentRegistration(
IComponentRegistry registry,
IComponentRegistration registration)
{
registration.Preparing += (s, e) => {
e.Parameters = new[] { _exposeRequestorTypeParameter }
.Concat(e.Parameters);
};
}
}
,需要一個System.Type
參數將獲得通過的請求的類型的任何組件(如果有的話)。可能的改進可能是使用NamedParameter
而不是比TypedParameter
限制Type
參數將只匹配具有某個名稱的參數。
請讓我知道這是否有效,其他人詢問了相同的一般任務,這將是很好的與他們分享。
不,不幸的是,它不起作用。 LimitType是組件本身的類型(本例中爲C1) – oryol 2011-01-24 19:04:46