加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ASP.NET MVC 3应用程序中引用类库中的Ninject

发布时间:2020-12-16 10:01:16 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET MVC 3应用程序,它使用Ninject.MVC3扩展来在我的MVC应用程序中设置DI.也就是说,App_Start文件夹中有NinjectMVC3.cs文件,其中定义了我的绑定.这适用于我的应用程序控制器中的DI. 除了ASP.NET MVC Web应用程序之外,我的解决方案还包含一个类库
我有一个ASP.NET MVC 3应用程序,它使用Ninject.MVC3扩展来在我的MVC应用程序中设置DI.也就是说,App_Start文件夹中有NinjectMVC3.cs文件,其中定义了我的绑定.这适用于我的应用程序控制器中的DI.

除了ASP.NET MVC Web应用程序之外,我的解决方案还包含一个类库项目,我们称之为MyProject.Core,它具有我的域模型,服务等.在那里,我有一个名为UserServices的类,它使用名为EmailServices的服务,如下所示:

public class UserServices : IUserServices
{        
    private readonly IEmailServices _emailServices = new EmailServices();

    public void CreateUser(...)
    {
        // Create user...

        _emailServices.SendWelcomeEmail(newUser);
    }
}

如您所见,UserServices类对EmailServices具有硬编码依赖性,但我希望将其配置为使用DI.也就是说,在我的ASP.NET MVC应用程序(或单元测试项目或任何地方),我希望能够说,“绑定IEmailServices以使用TestEmailServices”并让UserServices类使用TestEmailServices而不是EmailServices.

我该怎么做呢?我希望能够做到这样的事情:

public class UserServices : IUserServices
{        
    private readonly IEmailServices _emailServices = kernel.Get<EmailServices>();

    ...
}

但在这种情况下,我不确定内核将来自哪里.我在问什么是有道理的,还是我在这里咆哮错了?

谢谢

解决方法

您应该能够使用构造函数注入执行此操作,如下所示:

private readonly IEmailServices _emailServices;

public UserServices(IEmailServices emailServices)
{
    _emailServices = emailServices;
}

Ninject自定义控制器工厂应自动处理对控制器的服务注入,它将使用配置的IoC容器在创建控制器时解析IUserServices对象,然后容器将给出一个IEmailServices对象:

public class MyController : Controller
{
    private readonly IUserServices _userServices;

    public MyController(IUserServices userServices)
    {
        _userServices = userServices;
    }
}

在进行单元测试时,您可以手动将虚假或模拟电子邮件服务注入用户服务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读