相关疑难解决方法(0)

自动装配如何在Spring工作?

关于控制(IoC)的反转是如何工作的,我有点困惑Spring.

假设我有一个名为的UserServiceImpl实现UserService接口的服务类.

怎么会这样@Autowired

而在我Controllers,我怎么会instantiateinstance这个服务的?

我会做以下吗?

UserService userService = new UserServiceImpl();
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc ioc-container autowired

481
推荐指数
5
解决办法
33万
查看次数

我应该在哪里注射Ninject 2+(我如何安排我的模块?)

我有一个解决方案,有两个相关的(对这个问题)项目,还有一些其他项目;

  1. 具有其他几个项目使用的功能的类库.
  2. ASP.NET MVC应用程序.

我的问题基本上是我应该使用Ninject 2做IoC,考虑到......

  • 类库需要一些DI爱,其中包括需要Web请求特定会话对象的存储库类(想想工作单元).
  • MVC应用程序需要DI,因为在Ninject 2中你基本上都是从NinjectHttpApplication继承的.
  • 类库的单元测试需要注意这一点,以注入一组不同的存储库.
  • 出于同样的原因,需要注入Web应用程序的单元测试.

我把自己画成了一个心理角落,因为我只看到了三个选项.类库中的DI,Web应用程序中的DI,或两者都有,但每个都有问题:

  • 我不能在类库中做DI ,因为MVC应用程序需要从NinjectHttpApplication继承而开始.
  • 我不能只在MVC应用程序中执行DI - 毕竟,类库是由其他库使用的,并且MVC应用程序不应该对库的内部结构有太多了解.
  • 我想这是我能看到的唯一出路:两个项目的独立IoC.类库和MVC应用程序都有自己的IoC设置,并为他们的东西做DI,而不是真正关心彼此.

有没有人对如何做这样的事情有一些"最佳实践"或指导方针?我无法想象我是第一个在这种情况下结束的人,而且知道"正确"的做法是什么肯定会很好......

谢谢!

asp.net-mvc ninject inversion-of-control

38
推荐指数
1
解决办法
1万
查看次数

Ninject是否支持Func(自动生成工厂)?

Autofac自动生成工厂Func<T>; 我甚至可以传递参数.

public class MyClass
{
    public MyClass(Func<A> a, Func<int, B> b)
    {
        var _a = a();
        var _b = b(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以和Ninject一样吗?如果没有,我可以申请哪种解决方法?

谢谢.

更新:

刚发现这篇帖子,似乎答案是否定的:

如何使用Ninject处理带静态方法的类?

ninject func autofac

21
推荐指数
1
解决办法
5179
查看次数

依赖注入:乌龟一路下来?

所以我想知道单元测试在处理外部依赖关系方面是如何工作的.在这里和其他地方,我已经熟悉依赖注入,以及它如何允许我们测试代码的单元(A).但是,我对如何测试现在具有外部依赖性的其他单元(B和C)感到困惑,因此他们可以将它注入原始单元(A).

例如,假设一些类Foo使用外部依赖...

class Foo
{
    private ExternalDependency ed;
    public int doSomethingWithExternalDependency() {...}
}
Run Code Online (Sandbox Code Playgroud)

而且Bar使用Foo ...

class Bar
{
    public int doSomethingWithFoo
    {
        Foo f = new Foo();
        int x = f.doSomethingWithExternalDependency();
        // Do some more stuff ...
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道我可以使用依赖注入,以便我可以测试Foo,但是我如何测试Bar?我想,我可以再次使用依赖注入,但在某些时候某些单元需要实际创建外部依赖; 那我该怎么测试那个单位呢?

unit-testing dependency-injection

16
推荐指数
1
解决办法
1223
查看次数

C#.如何在对象中注入多个依赖项实例?

我有以下课程(部分内容):

class SearchViewModel : BaseViewModel<SearchResultItem>
{        
    private readonly IDownloader _downloader;        

    public SearchViewModel( IDownloader downloader)
        : base(model)
    {
        _downloader = downloader;
    }

    private void Download(object sender, DoWorkEventArgs e)
    {
        _downloader.Download(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

我为IDownloader使用了构造函数注入,并且在多线程出现之前它已经运行良好.

_downloader有一个状态,我需要在单独的线程中运行_downloader.Download(item)(用户单击搜索结果页面上的下载按钮).

目标:之前_downloader.Download(item),_downloader应初始化一个新实例.我可以使用_container.Resolve(IDownloader),但它会破坏组合根原则.

我已经创建了讨论最佳解决方案的问题,因为我认为直接初始化(new())或对容器的引用不是答案.

c# dependency-injection

6
推荐指数
1
解决办法
1981
查看次数

混淆使用IOC容器,服务定位器和工厂

假设我有一个BaseForm依赖于一个ILoggerIResourceManager或类似的东西.目前,它使用服务定位器解决了所需服务的正确实现,我知道这是一种反模式.

  • 是使用构造函数注入正确的方法来解决这种依赖?
  • 我是否必须BaseForm在容器中注册my (及其'派生类型)才能创建具有已解析依赖项的实例?这不是一切都复杂化吗?
  • 使用围绕服务定位器的静态工厂是不是很糟糕?
  • 除了单元测试之外,由于使用服务定位器反模式,我真的会受到惩罚吗?

很抱歉一次提出很多问题.我已经阅读了以下SO问题和许多其他问题,但阅读它们只会增加我的困惑:

dependency-injection anti-patterns ioc-container inversion-of-control service-locator

4
推荐指数
1
解决办法
2005
查看次数