我们试图找出基本情况下单元测试的重点,如下面的代码所示.为这个有益的单元测试吗?我们不是试图测试实体框架.我们只是想确保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
我试图通过以下配置在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) 我在公共库中使用依赖解析器接口作为抽象.这使我可以灵活地切换容器.鉴于下面的接口和静态IoC类,我需要使用不带IKernel全局asax 的工厂初始化IoC .
请参阅下面我如何使用NinjectHttpApplicationbase创建Ninject内核.
这是问题所在; 该IKernel物业CtsDependencyFactory始终null.
Ninject不会像这样注射自己吗?我应该使用不同的方法传递IKernel给工厂吗?我找不到像静态类ObjectFactory中StructureMap的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) 我要建立新的"企业解决方案"
所以我决定使用" 洋葱架构 ",因为我想要灵活的架构.
但我对"依赖性解决方案"的关注是新手.
据我所知,我应该将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
朋友们,我在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)
谁能为此提出一些解决方案?
有没有可用的设计模式?如果是,请提供参考链接.
提前致谢.
我试图在服务中使用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)
仍然没有成功,仍然得到同样的错误.我相信我在这里错过了一些技巧.它在我在组件中使用相同的东西时工作,我不知道它为什么不在服务类中接受它.
我使用 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”的可访问构造函数。
有人知道怎么修这个东西吗。感谢您!!
我们正在开发新的Android应用程序,仅使用Kotlin语言.
我们想使用依赖注入框架.Dagger 2是基于Java的框架.据我所知,Google没有基于Kotlin的DI框架.
由于 Symfony 5.1 通过自动装配注入容器已Psr\Container\ContainerInterface被弃用,请参阅https://symfony.com/doc/current/service_container.html#public-versus-private-services
如果服务仍然需要访问容器,将来是否需要手动注入,或者是否有其他更方便的注入方式?
一种选择是使用按名称自动装配并注入它,只要有一个名为 的变量$container,但这感觉像是一种黑客攻击。
问题:如果在 Symfony 5.1+ 中服务仍然依赖于容器,那么授予服务访问容器的最佳实践是什么?
我想了解如何实现依赖注入,但我有一些问题:
我可以使用抽象类吗?我读了一些关于 DI 的文章,如果我理解得很好,他们说你必须使用接口而不是抽象类 - 如何避免在不同的类中使用重复的代码?
如果我在一个类中有很多依赖项,我是否必须将它们全部注入到构造函数中?如果我不在所有方法中使用所有这些怎么办?
我可以实例化对象吗?如果我不实例化对象,我如何调用类的构造函数?