如何解决Ninject模块中的依赖关系?

时间:2011-03-23 17:56:56

标签: c# asp.net-mvc-3 ninject

我正在使用Ninject 2和Asp.Net MVC 3.我有以下模块。

public class ServiceModule : NinjectModule
{
    public override void Load()
    {
        //I need to get the 'configHelper' from Ninject Container. 
        IConfigHelper configHelper = ResolveConfigHelperHere();

        Bind<IMyService>().To<MyServiceImpl>().WithConstructorArgument("myArg", configHelper.MyProperty);

    }
}

我们如何获得已在Ninject模块中绑定的'IConfigHelper'实例?

1 个答案:

答案 0 :(得分:17)

var helper = Kernel.Get<IConfigHelper>();
Bind<IMyService>().To<MyServiceImpl>().WithConstructorArgument(
    "myArg",
    helper.MyProperty
);

这是一个完整的例子:

public interface IConfigHelper
{
    string MyProperty { get; set; }
}

public class ConfigHelper : IConfigHelper
{
    public string MyProperty { get; set; }
}

public interface IMyService
{

}

public class MyServiceImpl : IMyService
{
    public MyServiceImpl(string myArg)
    {

    }
}

public class HelperModule : NinjectModule
{
    public override void Load()
    {
        Bind<IConfigHelper>()
            .To<ConfigHelper>()
            .WithPropertyValue("MyProperty", "foo");
    }
}

public class ServiceModule : NinjectModule
{
    public override void Load()
    {
        var helper = Kernel.Get<IConfigHelper>();
        Bind<IMyService>()
            .To<MyServiceImpl>()
            .WithConstructorArgument("myArg", helper.MyProperty);
    }
}

class Program
{
    static void Main()
    {
        IKernel kernel = new StandardKernel(
            new HelperModule(),
            new ServiceModule()
        );

        var service = kernel.Get<IMyService>();
    }
}