I want to implement something similar to this: http://www.kjetilk.com/2011/10/auto-wiring-eventaggregator.html.
But instead of using InterceptingCatalog, I want to do the wiring after the Resolve method of the Unity Container is called and the class implementing IHandle is resolved. Is there any support for post processing resolved instances right after they are resolved in Unity?
Thanks
Have a look at the TecX project on codeplex. The source contain exactly what you are looking for in TecX.Event.Unity
Related
I would like a recommendation on how to instrument each pipeline call using Elastic APM API on Intershop 7.10.
I want to to create a separate span as described here:
https://www.elastic.co/guide/en/apm/agent/java/master/public-api.html#api-span-start-span
(Using try catch block with parent.startSpan())
For now I have tried looking into ICM knowledge base for topics regarding ELK stack (found none) and looked in Component Framework section on how to inject some code around PipelineProcessorImpl.executePipeline or put another pipeline processor implementation through component framewowrk but couldn't find nothing, it seems for now that pipeline processor implementation are not hooked through Component Framework.
General answer is, you should not bother replacing PipelineProcessor with your own implementation. Even for such a seemingly small task of feeding your own monitoring solution.
I (may) have a better solution for you. Haven't tested it though. Have a look at the detailed answer to this intershop question: Adding a servlet to run in Intershop 7.4 application server context
You don't want to add a new servlet but you want to bind a new javax.servlet.Filter implementation that hooks into the Application Server request chain. You can do that the same way as described, but invoke method filter("/servlet/Beehive/*") instead of serve("/servlet/DEMO/*")
In the developing of liferay portlet, If I use IFramePortlet(com.liferay.portlet.iframe.IFramePortlet) in portlet-class tag in portlet xml
ERROR like this -
Registering portlets for gospel-for-asia-portlet
06:08:00,712
ERROR [localhost-startStop-6][PortletBagFactory:411] java.lang.ClassNotFoundException: com.liferay.portlet.iframe.IFramePortlet
(sometimes NoClassDefFoundError happens)
This error occurs on registering not building. I did add External Jars with portal-impl.jar for this.
That source is presented on github. I didn't change anything.
I am struggling with this problem for couple of days. Any clues would be welcomed.
Thank you.
You must not add portal-impl.jar to your custom portlets. This is the problem: IFramePortlet is part of portal-impl.jar, so it's part of Liferay's implementation. You don't have access to this class from a plugin. If you want it, you'll have to get the sourcecode and implement it yourself.
Adding portal-impl.jar will try to initialize all kind of portal infrastructure for a second time. Plus, you'll not want to depend on such a big library just for a tiny trivial portlet implementation.
The project I'm on requires we use Unity. The lifetime managers are correctly set so this is not an issue with setting a lifetime manager. We have a special case where I need to resolve a service but it needs to freshly resolve every dependency as if it was the original request. In Autofac I can do this by injecting an Owned. Does Unity support anything like that or is there a way I can call Resolve and get a fresh set of injections?
Unity doesn't have equivalent of Autofac's Owned<> feature.
As for your problem, I think factories could solve it. You can write your own factory or use Unity Automatic Factories feature. More info on msdn.
I ended up using a Marker interface and registering that interface with a different scope. Then when I must have a new instance and not a shared instance I use the other interface.
I have been attempting to configure masstransit in my Web Application's UnityConfig.cs file with no success. I have attempted several methods and read many articles, but still have not gotten it to work. I looked at the example that is on the MassTransit site but can not seem to get it to work. The first issue that I am having is the I cannot figure out what assembly the "TypeFinder" class lives in, nor can I find the "FindTypesWhichImplement" method.
Is the example on the masstransit page suppose to work or is it more of "This is what it may look like" example.
The Starbucks sample (https://github.com/MassTransit/RabbitMQ-Samples/tree/master/Starbucks) has Winsor, StructureMap, and NInject but no Unity. I don't think any of the core team uses Unity.
Though I'd start with making sure you have Unity integration NuGet package included. Check your namespaces (using MassTransit;). It's all extension methods, and should be in the MassTransit namespace. We might have misplaced a type in the wrong namespace somewhere but my quick check of the source doesn't show any.
Currently I've got a Symfony2 DI container instance ready with a service and all it's dependencies. Lets say for example I have a Car class and it has Engine and Lights as dependencies.
In my current setup both these dependencies are automatically created through setter injection when the Car object is created, but it might very well be that my Car object won't need it's lights this time around thus it doesn't explicitly need to create an instance of this dependency.
Is there a way to achieve this in Symfony DI? Thus only creating an instance of the Lights object when needed? My guess is it'll be some sort of Proxy implementation like Doctrine has but as far as i've seen it doesn't exist in Symfony DI.
Inject the dedendencies that are mandatory through the Constructor via your services.yml, automatically.
If you have optional dependencies inject them through a setter in your Controller when you need them.
$this->container->get('cars')->setLights(new \Namespace\Lights());
Of course your Cars class must be designed like so and you have to direct the injections yourself in your controller, or whereever needed, code.
Question is already answered, but for who needs this functionality, lazy services are implemented in Symfony 2.3.
You need to install the ProxyManager bridge.
You can find official documentation here.
A very interesting question, but I don't think it's possible within Symfony2's Dependency Injection Container. The container is only aware of what you tell it - in this case, you have a dependency that's conditional on a specific use-case. Plus, the registration of services happens early on in the app's life, so I don't see how you could get this to work.
Maybe you should use the Factory pattern. Register a CarFactory as a service, and then when fetching a Car instance, you can specify that it should include a Light dependency.
Can I ask why you want to achieve this? There may be a simpler solution.
It's not a pretty workaround, but you can try injecting the whole DIC, then getting the Light and Engine services when neccessary.
I was thinking about something like this method in the Car class:
protected function getLightService()
{
if (!$this->light) { //so we reuse the first instance
$this->light = $this->dic->get("car.light");
}
return $this->light;
}