有没有办法在Xamarin.Android项目中使用Autofac进行构造函数注入?

有没有办法在Xamarin.Android项目中使用Autofac进行构造函数注入?,xamarin.android,autofac,xamarin,Xamarin.android,Autofac,Xamarin,我正在推出一个Xamarin.Android版本的现有应用程序,该应用程序主要构建在微软的堆栈上(W8/WP8/Silverlight等),而Autofac在整个应用程序中被广泛使用 Autofac更喜欢通过构造器参数显示依赖关系,当然,构造器参数假设编码者我可以控制ViewModels/Controller的创建,或者在Android的情况下。。。活动 我的问题是:考虑到Android框架负责活动的创建,我有没有办法以期望的方式使用Autofac?我能做些什么来拦截活动创建,以按照Autofa

我正在推出一个Xamarin.Android版本的现有应用程序,该应用程序主要构建在微软的堆栈上(W8/WP8/Silverlight等),而Autofac在整个应用程序中被广泛使用

Autofac更喜欢通过构造器参数显示依赖关系,当然,构造器参数假设编码者我可以控制ViewModels/Controller的创建,或者在Android的情况下。。。活动


我的问题是:考虑到Android框架负责活动的创建,我有没有办法以期望的方式使用Autofac?我能做些什么来拦截活动创建,以按照Autofac的设计方式解决依赖关系吗?

一个可能的解决方法是对活动进行子类化,并在可写属性上使用自定义属性标记依赖关系

然后,我们可以使用反射将这些属性拉出,并使用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);
        }
    }
}

这种方法有效,但感觉有点脏。我能做些什么改进吗?

我对Monodroid没有什么经验,但这里不是有类似于
活动工厂的东西吗。您是否查看了源代码以了解框架如何创建新活动?AndroidFactory不是公共接口。如果是的话,我仍然在寻找我,开发人员,可以从框架中访问的东西,它允许我控制活动的实例化。