在MVC的基础控制器中,我有以下注入代码,它工作得很好。
[Inject]
private INavigationRepository navigationRepository { get; set; }
[Inject]
private ISessionService sessionService { get; set; }
我没有得到构建错误,它在死亡的黄页中显示为"System.NullReferenceException: Object reference not set to a instance of an object“。并指向引用navigationReposi
我正在尝试实现类似于Jason的ASP.NET Core应用程序的设计。在WebUi“层”中,我试图实现IIdentityService的抽象,在该抽象中,我希望访问与当前HttpRequest相关联的。
在深入研究了github的源代码之后,我发现Controller.User属性来自于.HttpContext?派生自,该派生自定义为HttpContext属性的
/// <summary>
/// Gets or sets the <see cref="Http.HttpContext"/> for the current request.
/// &
我在symfony应用程序中创建了一个新服务:
namespace AppBundle\Service;
class CustomService {
public function __construct($username, $password) {
// stuff
}
public function getItems() {
}
}
并在config.yml中配置:
services:
custom_service:
class: AppBundle\Service\CustomServi
假设以下服务类:
class A {}
class B {}
class C {}
现在,Class A获得了对Class B的依赖。所以我只注射了Class B。在以后的开发中,我的Class A也需要Class C。(这可能会持续下去.)
注入依赖容器以便能够根据需要使用所有服务更好吗?还是只通过注入我需要的类来保持服务类的小?
这里的最佳做法是什么,为什么?
目前,我倾向于注入所需的每个依赖服务,主要是在一个地方看到依赖关系(标头中的DI注释)。
请不要因为“意见基础”这个问题是为了最佳实践,这必须是一个意见,但当大多数用户有相同的意见,然后它是一个最佳做法。
我最近被要求清理我们遗留的symfony代码,并检查在执行时是否也能获得性能。
我发现的第一件事是,在几乎每个控制器中,服务都将通过
public function someAction(Request $request){
$someService = $this->get(someService::class);
... there are plenty of them
}
我的问题是:在Controller构造函数中使用依赖注入会更好吗?
public function __construct(SomeService1 $someService1,
我有一个控制器
use Doctrine\ORM\EntityManagerInterface:
class ExampleController{
public function someFunction(ExampleService $injectedService){
$injectedService->serviceFunction();
}
}
使用服务
use Doctrine\ORM\EntityManagerInterface;
class ExampleService{
public function __construct(Entit
我试图在Symfony 4项目中创建自定义命令。
class AppOauthClientCreateCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('app:oauth-client:create')
->setDescription('Create a new OAuth client');
}
protected function execute(
我编程已经有一段时间了,但从理论上讲,我从未对每个概念的含义感兴趣,我可能正在使用各种各样的编程概念,但却不知道。
服务定位器:对我来说,是指通过减少代码量来加速开发的快捷方式的记录。一个问题是: Locator是否只引用名称空间/类,或者我可以拥有一个变量注册中心?
以下是我对此的理解:
$locator = new ServiceLocator()
$locator->set('app', new System\Application());
$locator->set('db', new System\Pdo());
// Get the o
我们在一个配置文件中声明了一些城堡温莎组件。深处的某些组件可能需要其他组件的服务。
问题是在关闭应用程序和处理容器时。当Startable/Disposable组件(A)需要其他组件(B)的服务时,在Dispose()/Stop()期间,将引发ComponentNotFoundException。到那时,B已经从容器中移除了。
我注意到app配置文件中组件声明的顺序很重要。再用A和B来解决这个问题。
是否有更好的方法来影响处理组件的顺序?
编辑:在注释中的请求之后,我在这里提供了一个示例代码,它将抛出ComponentNotFoundException:
class Program
{
我使用JBoss教程和应用程序结构开发了一个TicketMonster社交网络web应用程序;我的设计涉及不同类型的帐户特权,许多服务需要检查登录用户的用户帐户详细信息以及他们希望查看/访问的其他数据。
例如。版主可以查看禁用的帐户和评论,而成员则不能。
对于上面的示例,我使用的方法是创建一个查询,该查询使用用户名:Query query = entityManager.createQuery("select u from User u where u.username in :userName", User.class); query.setParameter(
我们正在使用DI和Unity来处理不同的依赖关系(通常,数据库和存储库类,dto到实体映射器等),现在我们正在尝试创建更小的函数,这些函数执行彼此独立的任务,以增加可测试性,并避免具有大量不同职责的方法,以避免耦合
我的一个问题是,当我们有依赖于其他内部方法的方法时,当嵌套不是微不足道的时候,DI应该如何使用。例如,考虑以下示例(只是一个概念,而不是真正的工作代码):
public ProcessedOrder ProcessOrders(Order inputOrder)
{
foreach (var line in inputOrder.OrderLines)
{
前言:我的默认操作模式是使用IoC容器和构造函数注入。这使得使用模拟的依赖项进行测试变得非常简单。
我开始开发一个IntelliJ插件,我想利用倒置控制。因为这是一个插件,所以没有真正的容器选项(对吗?)因此,我想我需要使用模式。
如何使用服务定位器模式使用模拟测试?
我能想到的最好的方法是为我的定位器使用一个接口,使用一个静态getter在每个服务的默认构造函数中设置它,并有一个setter,这样我就可以设置一个模拟的定位器。看起来会是这样的:
public class MyService {
private IServiceLocator locator;
public
这两种模式似乎都是倒置控制原理的一种实现。也就是说,对象不应该知道如何构造它的依赖项。
依赖注入(DI)似乎使用构造函数或setter来“注入”它的依赖项。
使用构造函数注入的示例:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
服务定位器似乎使用了一个“容器”,它连接了它的依赖项并给foo它的bar。
使用服务定位器的示例:
//Foo Needs an IBar
public class Foo
如果我有一个像这样的服务定义/实现:
using System;
using System.ServiceModel;
namespace aspace.service
{
[ServiceContract(Namespace = "http://aspace.service")]
public interface IUpdate
{
[OperationContract]
ConfirmationMessage UpdatePerson(string PersonIdentifier);
}
}
public class UpdateSer
我目前正在尝试使用Microsoft.Extensions.DependencyInjection库将依赖注入集成到我的xamarin forms跨平台移动应用程序中。我能够在我的共享项目中注册我的服务和视图模型,但我不确定如何注册在特定于平台的项目中实现的服务。例如,我有一个通过特定于平台的代码实现的接口(IAuthenticationService),所以它在我的Android和iOS项目中都有实现,但我不确定如何在我的容器中注册它,以便基于当前运行的平台使用正确的实现。这是我如何在我的共享项目中的启动类中设置DI容器: public static class Startup
{