Как разрешить зависимость внутри Ninject Module? - PullRequest
15 голосов
/ 23 марта 2011

Я использую 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);

    }
}

Как мы можем получить экземпляр IConfigHelper, который уже связан с модулем Ninject?

1 Ответ

17 голосов
/ 23 марта 2011
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>();
    }
}
...