标签: dependency-injection

如何使用lambda表达式Entity Framework/Repository模式进行单元测试

我们试图找出基本情况下单元测试的重点,如下面的代码所示.为这个有益的单元测试吗?我们不是试图测试实体框架.我们只是想确保lambda表达式做它应该做的...我们的想法是我们将使用DI传递IQIeryable的SOMETHING.在实践中它将是EF但是用于单元测试并且将是POCO对象/集合.这有道理吗?我们刚刚开始并希望在超出此基本代码之前掌握这些概念.

   public class CongressRepository
{
    CongressDb_DevEntities context = new CongressDb_DevEntities();

    CongressRepository(DbContext db)
    {
        context = (CongressDb_DevEntities) db;
    }

    public IQueryable<tMember> GetAllMembers
    {
        get { return context.tMembers; }
    }

    public IQueryable<tMember> GetVotingMembers
    {
        get { return context.tMembers.Where(x => x.age > 18); }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# lambda unit-testing entity-framework dependency-injection

0
推荐指数
1
解决办法
1805
查看次数

Spring:bean的映射,试图在另一个bean中注入依赖,获取空指针

我试图通过以下配置在spring中创建bean的映射.

<util:map id="utilBeansMap" map-class="java.util.HashMap">
        <entry key="getFlightsLogger">
            <bean
                class="com.test.package.bean1" />
        </entry>
        <entry key="getOnDLogger">
            <bean
                class="com.test.package.bean2" />
        </entry>
    </util:map>
Run Code Online (Sandbox Code Playgroud)

然后使用将此Map作为资源注入另一个bean(比如UserSerice)

 @Resource(name = "utilBeansMap")
 private Map<String, BaseUtilBean> utilBeansMap;
Run Code Online (Sandbox Code Playgroud)

但是当我试图从这张地图中获取bean时,我得到空指针.

我看着日志.日志显示此map bean已初始化,但是当UserService开始启动时,此map bean已被销毁.

DEBUG DefaultListableBeanFactory - Creating shared instance of singleton bean 'utilBeansMap'
DEBUG DefaultListableBeanFactory - Creating instance of bean 'utilBeansMap'
DEBUG DefaultListableBeanFactory - Eagerly caching bean 'utilBeansMap' to allow for resolving potential circular references
DEBUG DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'utilBeansMap'
DEBUG DefaultListableBeanFactory - Finished creating instance of bean …
Run Code Online (Sandbox Code Playgroud)

java spring dependency-injection java-ee

0
推荐指数
1
解决办法
3458
查看次数

在Ninject中将IKernel注入属性

我在公共库中使用依赖解析器接口作为抽象.这使我可以灵活地切换容器.鉴于下面的接口和静态IoC类,我需要使用不带IKernel全局asax 的工厂初始化IoC .

请参阅下面我如何使用NinjectHttpApplicationbase创建Ninject内核.

这是问题所在; 该IKernel物业CtsDependencyFactory始终null.

Ninject不会像这样注射自己吗?我应该使用不同的方法传递IKernel给工厂吗?我找不到像静态类ObjectFactoryStructureMap的Ninject得到一个参考解析器.

任何帮助表示赞赏.

public interface IResolveDependency
{
    T Resolve<T>();
    T Resolve<T>(params object[] parameters);
    T Resolve<T>(string name);
    T Resolve<T>(string name, params object[] parameters);
    object Resolve(Type type);
    IEnumerable<T> ResolveAll<T>();
    void Clear();
}

public interface IResolveDependencyFactory
{
    IResolveDependency CreateInstance();
}

public class CtsDependencyResolver : IResolveDependency
{
    private readonly IKernel m_kernel;

    public CtsDependencyResolver(IKernel kernel)
    {
        m_kernel = kernel;
    }

    #region Implementation of IResolveDependency …
Run Code Online (Sandbox Code Playgroud)

.net c# dependency-injection ninject

-1
推荐指数
1
解决办法
2474
查看次数

洋葱建筑:工厂实施的位置?

我要建立新的"企业解决方案"

所以我决定使用" 洋葱架构 ",因为我想要灵活的架构.

但我对"依赖性解决方案"的关注是新手.

据我所知,我应该将Factories" Implementations "放在这个Layer中,这个层引用了所有其他层.

然后,当DependencyResolution层和UI层中的FactoryImplementation没有引用"DependencyResolution Layer" 时,我想知道如何在" UI层 " 中创建IFactory的新实例


编辑::

感谢Erik先生

但是当我看到许多这些链接之后,当我想将"注册"实现"注册"到他们的"接口"时,我仍然有问题,因为我在UI项目中不能做这样的事情:

kernel.Bind<ITaxCalculator>()
      .To<TaxCalculator>()
      .WithConstructorArgument("rate", .2M);
Run Code Online (Sandbox Code Playgroud)

因为UI Project无法访问TaxCalculator"实现".

architecture design-patterns dependency-injection onion-architecture

-1
推荐指数
1
解决办法
1260
查看次数

从接口调用一些方法而不覆盖JAVA中的所有方法

朋友们,我在Java中遇到了一个问题:我想实现一个结构,但是我遇到了一些困难,任何人都可以帮助我.

interface samp1{
    method1()
    method2()
    method3()
}

interface samp2{
    method4()
    method5()
}
class Samp implements samp1,samp2
{
  // this class needs only method1 from interface samp1 and method 4 from interface samp2
  // I don't want to override all the methods from interface 
}
Run Code Online (Sandbox Code Playgroud)

谁能为此提出一些解决方案?

有没有可用的设计模式?如果是,请提供参考链接.

提前致谢.

java design-patterns dependency-injection interface class

-1
推荐指数
1
解决办法
9218
查看次数

服务中没有"渲染器提供程序"错误

我试图在服务中使用Angular 2 Renderer类方法.

首先,我将它注入到类构造函数中,如下所示:

    @Injectable
    export class MyService{
     constructor(private renderer: Renderer,
                 private _cd: ChangeDetectorRef){}

     myFunct(){
       this.renderer.setElementStyle(......);
      }
    ......
    }
Run Code Online (Sandbox Code Playgroud)

有了这个,浏览器控制台就抛出一个错误堆栈:

   Error: No provider for Renderer!
at NoProviderError.BaseError [as constructor] (http://local.xyz.com:3000/vendor.bundle.js:30912:34)
at NoProviderError.AbstractProviderError [as constructor] (http://local.xyz.com:3000/vendor.bundle.js:28881:16)
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow上阅读了与此类问题相关的几个答案,以及Angular DI上的一篇关于nattram的博客文章,并尝试使用如下@Inject的服务类构造函数:

   constructor(@Inject(Renderer) renderer : Renderer){}
Run Code Online (Sandbox Code Playgroud)

仍然没有成功,仍然得到同样的错误.我相信我在这里错过了一些技巧.它在我在组件中使用相同的东西时工作,我不知道它为什么不在服务类中接受它.

dependency-injection typescript angular2-services angular

-1
推荐指数
1
解决办法
801
查看次数

Autofac 未找到任何构造函数

我使用 Autofac 创建一个带有 DependencyInjection 的项目 WindowsForm 应用程序。我在构建时遇到问题。这是我的Program.cs

        var builder = new ContainerBuilder();
        builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
        builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerDependency();
        builder.RegisterType<DbFactory>().As<IDbFactory>().InstancePerDependency();
        builder.RegisterType<DITestDbContext>().AsSelf().InstancePerDependency();
        // Repositories
        builder.RegisterAssemblyTypes(typeof(ProductCategoryRepository).Assembly)
            .Where(t => t.Name.EndsWith("Repository"))
            .AsImplementedInterfaces().InstancePerDependency();

        // Services
        builder.RegisterAssemblyTypes(typeof(ProductCategoryService).Assembly)
           .Where(t => t.Name.EndsWith("Service"))
           .AsImplementedInterfaces().InstancePerDependency();
        Autofac.IContainer container = builder.Build();

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(container.Resolve<Form1>());
Run Code Online (Sandbox Code Playgroud)

我遇到一条错误消息

DependencyResolutionException:激活特定注册期间发生错误。有关详细信息,请参阅内部异常。注册:Activator = ProductCategoryService (ReflectionActivator)、服务 = [DITest.Service.IProductCategoryService]、生命周期 = Autofac.Core.Lifetime.CurrentScopeLifetime、共享 = None、所有权 = OwnedByLifetimeScope

DependencyResolutionException:激活特定注册期间发生错误。有关详细信息,请参阅内部异常。注册:Activator = UnitOfWork (ReflectionActivator),服务 = [DITest.Data.Infrastruct.IUnitOfWork],生命周期 = Autofac.Core.Lifetime.CurrentScopeLifetime,共享 = None,所有权 = OwnedByLifetimeScope

NoConstructorsFoundException:找不到类型“DITest.Data.Infrastruct.UnitOfWork”的可访问构造函数。

有人知道怎么修这个东西吗。感谢您!!

.net c# dependency-injection autofac winforms

-1
推荐指数
1
解决办法
7767
查看次数

Kotlin与Dagger 2

我们正在开发新的Android应用程序,仅使用Kotlin语言.

我们想使用依赖注入框架.Dagger 2是基于Java的框架.据我所知,Google没有基于Kotlin的DI框架.

  1. 是否可以将Dagger 2与Kotlin一起使用?
  2. 我们什么时候可以期待来自谷歌的基于Kotlin的DI框架?如果是这样,它是否向后兼容Dagger 2以迅速采用?

android dependency-injection kotlin dagger-2

-1
推荐指数
1
解决办法
266
查看次数

在 Symfony 中注入“容器”

由于 Symfony 5.1 通过自动装配注入容器已Psr\Container\ContainerInterface被弃用,请参阅https://symfony.com/doc/current/service_container.html#public-versus-private-services

如果服务仍然需要访问容器,将来是否需要手动注入,或者是否有其他更方便的注入方式?

一种选择是使用按名称自动装配并注入它,只要有一个名为 的变量$container,但这感觉像是一种黑客攻击。

问题:如果在 Symfony 5.1+ 中服务仍然依赖于容器,那么授予服务访问容器的最佳实践是什么?

php dependency-injection autowired symfony

-1
推荐指数
1
解决办法
1541
查看次数

抽象类和依赖注入

我想了解如何实现依赖注入,但我有一些问题:

  1. 我可以使用抽象类吗?我读了一些关于 DI 的文章,如果我理解得很好,他们说你必须使用接口而不是抽象类 - 如何避免在不同的类中使用重复的代码?

  2. 如果我在一个类中有很多依赖项,我是否必须将它们全部注入到构造函数中?如果我不在所有方法中使用所有这些怎么办?

  3. 我可以实例化对象吗?如果我不实例化对象,我如何调用类的构造函数?

c# abstract-class dependency-injection

-2
推荐指数
1
解决办法
3450
查看次数