可能な回避策は、アクティビティをサブクラス化し、書き込み可能なプロパティのカスタム属性で依存関係をマークすることです。
次に、リフレクションを使用してそれらのプロパティをヤンクし、Autofac を使用してそれらを挿入できます。これは、コンストラクターで依存関係をマークするという Autofac の規則には従いませんが、MEF が行うように、ジョブを完了し、プロパティを挿入します。
public class AutofacActivity : Activity
{
private static ContainerBuilder ContainerBuilder { get; set; }
protected override void OnCreate(Bundle bundle)
{
base.OnCreate (bundle);
// Bootstrap
if (Core.IoC.Container == null) {
new Bootstrapper ().Bootstrap ();
}
PropertyInfo[] properties =
this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties.Where(p=>p.GetCustomAttributes(typeof(InjectAttribute), false).Any())) {
object instance = null;
if (!Core.IoC.Container.TryResolve (property.PropertyType, out instance)) {
throw new InvalidOperationException ("Could not resolve type " + property.PropertyType.ToString ());
}
property.SetValue (this, instance);
}
}
}
この方法は機能しますが、少し汚れているように感じます。私ができる改善点はありますか?