внедрение зависимостей с asp.net mvc - PullRequest
1 голос
/ 21 октября 2010

У меня есть класс обслуживания:

public class MyService : IService
{
    private IRepoA repoA;
    private IRepoB repoB;

    public MyService(IRepoA repoA,IRepoB repoB)
    {
        this.repoA=repoA;
        this.repoB=repoB;
    }
}

мой контроллер зависит от класса MyServiceL

public MyController : DefaultController
{
    IService myService;
    public MyController(IService service)
    {
        myService=service;
    }
 }

как ввести класс MyService в контроллер? я должен сделать это? :

 Bind<IPostService>()
                .To<PostService>();

            Bind<IPostsRepository>()
                .To<SqlPostsRepository>()
                .WithConstructorArgument("connectionString", 
 ConfigurationManager.ConnectionStrings[0].ConnectionString);


            Bind<IUserRepository>()
                .To<FakeUserRepository>();

Ответы [ 2 ]

3 голосов
/ 21 октября 2010

Посмотрите на Ninject.Extensions.Mvc . Прочитайте прочитайте меня и документацию. Здесь есть все, что вам нужно. Судя по всему, все, что вам нужно, это правильно настроить приложение HttpApplication для наследования от NinjectHttpApplication и добавить соответствующий код конфигурации (все они находятся в файле readme / documentmenation)

2 голосов
/ 21 октября 2010

Вы захотите создать собственную фабрику контроллеров, которая внедрит для вас зависимости, и зарегистрировать эту фабрику в Global.asax.

Если вы используете карту структуры, это может выглядеть так:

public class IoCControllerFactory : DefaultControllerFactory   
{  
    protected override IController GetControllerInstance(Type controllerType)  
    {
        return (Controller)ObjectFactory.GetInstance(controllerType);  
    }  
}  
...