2017-10-05 27 views
0

我使用Xamarin开发Android应用程序。假设我有一个活动,它取决于一些接口:Xamarin Android和Dependecy Injection

interface IFoo 
{ 
    // methods 
} 

public class Foo : IFoo 
{ 
    private readonly IBar _bar; 

    public Foo(IBar bar) 
    { 
     _bar = bar; 
    } 

    // methods implementation 
} 
// dependency injection somewhere in Application class 
var container = new UnityContainer(); 
container.RegisterType<IFoo, Foo>(); 

public class MyActivity : Activity 
{ 
    // it's incorrect constructor and this code will not be compiled 
    public MyActivity(IFoo foo) 
    { 
     _foo = foo; 
    } 

    private readonly IFoo _foo; 
} 

我想在MyActivity的构造函数注入的IFoo的实例,但是你也知道这是不可能创建一个参数的构造函数。我怎样才能将IFoo的初始化实例及其所有依赖项传递给MyActivity?我使用Unity作为依赖注入框架(但我可以改变它)。

+0

为什么你想在'MyActivity'的构造函数中注入'IFoo'实例?如果你想初始化'UnityContainer',你可以在Android'Application'类中完成。 –

+0

@ YorkShen-MSFT以及如何在Activity类中使用它? – Pupkin

回答

0

在你的应用类中定义:

public static UnityContainer container { get; private set; } 

var container = new UnityContainer(); 

注册接口

container.RegisterType<IFoo, Foo>(); 

和如下解决

var myFoo = container.Resolve<IFoo>() 

注意:不要忘记添加命名空间using Microsoft.Practices.Unity;