标签: dependency-injection

"控制反转","依赖倒置"和"解耦"之间的区别

我正在阅读关于依赖倒置解耦的理论,我看不出两者之间的区别.

依赖性反转讨论了解耦功能组件,以便更高级别的组件不依赖于更低级别的组件.

解耦谈论同样的事情以及如何实现它.但是我们的IoC容器会让事情变得更糟.为什么它们不是称为依赖性反转容器或更好的依赖注入容器,因为它们服务于独立组件的运行时耦合?

然后我们有控制反转.这与Dependency Inversion基本相同,不是吗?为什么有三个术语描述同一个东西?还是我失明了?

  1. 三者有什么区别?
  2. IoC在IoC容器中需要做什么?

dependency-injection ioc-container decoupling

66
推荐指数
3
解决办法
2万
查看次数

C++的依赖注入框架

是否有与Google Guice相媲美的DI框架?谷歌使用什么?

c++ dependency-injection

66
推荐指数
4
解决办法
3万
查看次数

什么是依赖注入上下文中的组合根

我正在探索依赖注入,并且在整个地方使用术语组合根.那是什么?

dependency-injection inversion-of-control

66
推荐指数
2
解决办法
2万
查看次数

解决IContainer

从应用程序中的类中获取Autofac容器的建议方法是什么?Autofac是否提供解析类上的IContainer属性,还是我需要在构建容器后全局存储容器?

c# dependency-injection inversion-of-control autofac

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

Android MVVM设计模式示例

我目前做了很多WPF开发,并开始创建一些基本的Android应用程序.在创建WPF应用程序时,我经常使用MVVM,通常使用Prism,并且想知道Android平台是否有任何MVVM示例?

java android design-patterns dependency-injection mvvm

64
推荐指数
2
解决办法
6万
查看次数

如何让我的PHP IDE了解依赖注入容器?

当前情况:我通过使用依赖注入解决了项目中的依赖项.我想通过使用依赖注入容器(DIC)来简化对依赖项和延迟加载类的管理,从而采取下一个逻辑步骤.

我看了Bucket,PimplesfServiceContainer,进行了一些测试,真的很欣赏DIC的工作方式.因为它的简单性和原始力量,我可能会选择Pimple.如果我没有这个问题:

由于DIC提供的抽象,我正在使用的IDE(PHPStorm)不再理解我的代码中发生了什么.它不明白$ container ['mailer']或$ sc-> mailer是否持有一个类对象.我也试过Netbeans IDE:同样的问题.

这对我来说真的是个问题因为我的IDE变得无用了.在处理类时,我不想在没有代码提示,自动完成和重构工具的情况下编程.我不希望我的IDE在验证代码时发现各种误报.

所以我的问题是:有没有人处理过这个问题并找到了解决方案?

php ide dependency-injection phpstorm

64
推荐指数
4
解决办法
2万
查看次数

我不明白在控制器中使用$ inject

关于注入Angular,我完全感到困惑.我不知道在哪里使用它以及为什么.它是否仅用于此处所述的工厂

myController.$inject = ['$scope','notify'];
Run Code Online (Sandbox Code Playgroud)

notify是工厂的名称.

javascript dependency-injection angularjs

64
推荐指数
3
解决办法
5万
查看次数

OwinStartup时如何使用DI容器

这是一个Web API 2项目.

当我使用Ninject实现DI时,我收到一条错误消息

尝试创建"TokenController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.

[assembly: OwinStartup(typeof(Web.Startup))]

namespace Web
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
            ConfigureWebApi(app);
        }
    }
}

public class TokenController : ApiController
{

    private IUserService _userService;

    public TokenController(IUserService userService)
    {
        this._userService = userService;
    }

    [Route("api/Token")]
    public HttpResponseMessage PostToken(UserViewModel model)
    {
        if (_userService.ValidateUser(model.Account, model.Password))
        {
            ClaimsIdentity identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
            identity.AddClaim(new Claim(ClaimTypes.Name, model.Account));
            AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
            var currentUtc = new SystemClock().UtcNow;
            ticket.Properties.IssuedUtc = currentUtc;
            ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
            return new …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection ninject asp.net-web-api owin

64
推荐指数
2
解决办法
5万
查看次数

匕首和黄油刀与Android注释

我正在评估Android应用程序的依赖注入(DI)框架.最有力的竞争者是:Dagger(有Butter Knife)和Android Annotations.据我所知,Dagger和ButterKnife来自同一个源头,他们相互补充.这是我正在寻找的关键矩阵:

  1. 易于使用(我们的构建基于Gradle,我们使用Android Studio IDE)
  2. 测试支持(我们使用Robotium进行功能测试,使用RoboLectric进行单元测试)
  3. 性能(DI框架使用反射,哪一个更快?)

android dependency-injection android-annotations dagger butterknife

63
推荐指数
4
解决办法
3万
查看次数

什么是Pythonic方式进行依赖注入?

介绍

对于Java,依赖注入作为纯OOP工作,即您提供要实现的接口,并在您的框架代码中接受实现已定义接口的类的实例.

现在对于Python,您可以以相同的方式执行,但我认为在Python的情况下,该方法的开销太大了.那么你将如何以Pythonic方式实现它?

用例

说这是框架代码:

class FrameworkClass():
    def __init__(self, ...):
        ...

    def do_the_job(self, ...):
        # some stuff
        # depending on some external function
Run Code Online (Sandbox Code Playgroud)

基本方法

最天真(也许是最好的?)方式是要求将外部函数提供给FrameworkClass构造函数,然后从该do_the_job方法调用.

框架代码:

class FrameworkClass():
    def __init__(self, func):
        self.func = func

    def do_the_job(self, ...):
        # some stuff
        self.func(...)
Run Code Online (Sandbox Code Playgroud)

客户代码:

def my_func():
    # my implementation

framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
Run Code Online (Sandbox Code Playgroud)

问题很简短.有没有更好的常用Pythonic方法来做到这一点?或者也许任何支持此类功能的库?

更新:具体情况

想象一下,我开发了一个微型Web框架,它使用令牌处理身份验证.该框架需要一个函数来提供ID从令牌获得的一些并获得与之对应的用户ID.

显然,框架对用户或任何其他特定于应用程序的逻辑一无所知,因此客户端代码必须将用户getter功能注入框架以使身份验证工作.

python oop authentication frameworks dependency-injection

63
推荐指数
5
解决办法
2万
查看次数