我在ASP.NET 5中找到的用于使用DI的每个教程或示例都只展示了它如何与控制器和Razor视图一起工作。我需要对其他类使用DI,但不知道解析类型和提供实例的正确方法。现在,我有一个HackyDependencyResolver实例,为了获得适当的实例,所有东西都必须引用它。我想要么访问ASP.NET的服务解析器,要么遵循解决依赖关系的其他最佳实践。
例如,如果我有
public class SomeClass
{
public SomeClass(IUseMe useMe)
{
}
}
这不是一个ASP.NET MVC控制器。当创建IUseMe时,我需要一个解析SomeClas
我相信我做了一个愚蠢的假设,即IBus对象将在整个应用程序中加载,并且它是被引用的程序集。
例如,如果我要在引用的程序集中执行以下操作:
public IBus Bus {get;set;}
这个对象只会加载到实现IHandleMessages和IWantToBeLoadedAtStartup等NServiceBus类的类上,这样说对吗?
任何关于细节的帮助或澄清都将是很好的。
谢谢
我有一个具有以下签名的类:
class Service
{
public function __construct(
Class $a,
Class $b,
Class $c
)
如何在测试方法中获得它的实例?通过构造函数进行的调用将引发以下错误
Too few arguments to function Service::__construct(), 0 passed
但是在应用程序本身中,这个类可以工作,例如,在命令中:
class ServiceCommand extends AbstractCommand
{
我在理解如何在需要动态创建对象的场景中使用IoC时遇到了一个问题。假设我有这样的类:
abstract class Field {
public Field( ICommandStack commandStack ) {}
}
abstract class Entity {
public readonly Collection<Field> Fields { get; }
}
class EntityA {
public EntityA( ICommandStack commandStack ) {
Fields.Add( new StringField(
我编程已经有一段时间了,但从理论上讲,我从未对每个概念的含义感兴趣,我可能正在使用各种各样的编程概念,但却不知道。
服务定位器:对我来说,是指通过减少代码量来加速开发的快捷方式的记录。一个问题是: Locator是否只引用名称空间/类,或者我可以拥有一个变量注册中心?
以下是我对此的理解:
$locator = new ServiceLocator()
$locator->set('app', new System\Application());
$locator->set('db', new System\Pdo());
// Get the o
我正在尝试了解如何使用DI容器。
假设我有三个类: A、B和C,定义如下:
class A {}
class B
{
private $a;
public function set_a(A $a)
{
$this->a = $a;
}
}
class C
{
private $b;
public function set_b(B $b)
{
$this->b = $b;
}
}
现在我真正不明白的是,我应该用index.php写什么。我读到,实例化一个容器,然后将它传递给我的对象
谁能解释一下,当@Inject对象的类是用new操作符初始化时,为什么它是空的?
public class A{
@Inject
B b;
...
...
}
当上面的类被创建为A a = new A();时,我将得到b作为null。有谁能解释一下原因吗?我知道当我注入类A时它可以工作,但是我想知道为什么它不能和new运算符一起工作。spring是做什么的?
它们之间有什么不同,而不是按键在数组中设置和获取对象?
class Registry
{
private $container=array();
public static function Set($name,$object){
self::$container[$name]=$object;
}
public static function &Get($name){
return self::$container[$name];
}
}
我一直在玩棱镜,并决定使用棱镜+ WPf +Unity将应用程序转换为模块化的棱镜应用程序。
这个应用程序与各种硬件位有关,所以第一件事是将我所有的硬件类放在单独的模块中。
以我的摄像机类为例,通过以太网与摄像头系统进行了对话。
假设我的相机类是这样的(在PRISM转换之前)
Public Class Camera
{
// bunch of properties
public Task<bool> TakePhoto()
{
return Task.Run(()=>
{
// ...
我试图弄清楚对象实例化在Java中是如何工作的。我注意到,如果我试图访问一个应该通过@EJB注入的成员(如果定义成员的类是由我而不是容器显式实例化的),我就会得到一个NullPointerException。我的结论是,即使标记为要管理bean,如果不让容器实例化bean也不是。我们能让容器管理这样的对象吗?
假设我们有以下设置,是否可以在ClassC中实例化(显式)ClassC并让ClassB从ClassA调用方法而不引发NullPointerException?
@Stateless
public class ClassA {
public void bar() {
如果我有一个像这样的服务定义/实现:
using System;
using System.ServiceModel;
namespace aspace.service
{
[ServiceContract(Namespace = "http://aspace.service")]
public interface IUpdate
{
[OperationContract]
ConfirmationMessage UpdatePerson(string PersonIdentifier);
}
}
public class UpdateSer
我的DAO定义如下:
@Singleton
class MyDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] {
我有一个集成测试,它引用了这个DAO:
class SomeIntegrationTest {
lazy val someVal = new MyDAO
}
如何将DatabaseConfigProvider注入到SomeIntegrationTest中的MyDAO中?我不能在测试的构造函数中注
在我的解决方案中,我使用的是Autofac和Prism。下面是一个简单的项目,它解释了发生了什么。
我在Autofac的容器类中注册视图、视图模型和:
public class BootStrapper
{
public IContainer BootStrap()
{
var builder = new ContainerBuilder();
builder.RegisterType<EventAggregator>()
.As
给一堂课:
class Container
{
public function getServiceX()
{
create and return it
}
public function setServiceX ($obj)
{
}
}
这存储了一个对象的实例。你可以把它当作工厂。在行动中:
public function addTitle()
{
Container::getServiceX()->doIt();
}
他们说它不好,因为它是“全球性的”。但是可以更改对象,使其满足DI -但损害了LoD。如果这
我需要在代码执行过程中“动态”创建对象的prototype作用域实例。
我知道查找方法将是一个很好的解决方案:
<!-- a stateful bean deployed as a prototype (non-singleton) -->
<bean id="command" class="fiona.apple.AsyncCommand" scope="prototype">
<!-- inject dependencies here as required -->
</bean>
<
我喜欢依赖注入框架,以及它们如何允许我请求所有开头的一个对象。所有的布线都是在第一次请求“主”对象时进行的。但是,有些对象应该在运行时创建,例如基于用户输入。有时,这些新创建的对象应该在框架创建的其他对象之间共享。
我目前的方法是由框架注入“未初始化”对象。在运行时,我使用setter方法尽快设置对象。
我不喜欢这种方法的地方是,setter方法实际上只被调用一次,然后就不应该再被碰触了。这使我无法将字段声明为最终字段。我现在不知道如何在获得所有必要的信息之前创建对象,而不会失去DI框架的所有好处。
我对DI不熟悉。有什么好的模式吗?
示例:
// The service is used t