<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Andrey Shchekin's Blog - Latest Comments</title><link xmlns="http://www.w3.org/2005/Atom" rel="http://api.friendfeed.com/2008/03#sup" href="http://disqus.com/sup/all.sup#forumcomments-4801441f" type="application/json"/><link>http://ashmind.disqus.com/</link><description></description><language>en</language><lastBuildDate>Thu, 06 Nov 2008 15:00:43 -0000</lastBuildDate><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 1</title><link>http://blog.ashmind.com/index.php/2008/08/19/comparing-net-di-ioc-frameworks-part-1/#comment-3568987</link><description>great article... Ive never really been into .net myself but its certainly something im thinking about... your comparisons make interesting reading and maybe changed my mind in what direction to take.. very well written article thank you.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">colorchart</dc:creator><pubDate>Thu, 06 Nov 2008 15:00:43 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 1</title><link>http://blog.ashmind.com/index.php/2008/08/19/comparing-net-di-ioc-frameworks-part-1/#comment-3161708</link><description>Enjoyable Read! thanks for your time..</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David</dc:creator><pubDate>Sun, 19 Oct 2008 22:11:53 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2982644</link><description>Great review!  This is exactly what I was looking for to help clear things up for me.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Eric J. Smith</dc:creator><pubDate>Fri, 10 Oct 2008 16:24:10 -0000</pubDate></item><item><title>Re: Some thoughts on ASP.NET AJAX Roadmap</title><link>http://blog.ashmind.com/index.php/2008/07/19/some-thoughts-on-aspnet-ajax-roadmap/#comment-2718116</link><description>Thank you, very informative, I am looking forward to see more thoughts on APS.NET AJAX 4.0</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Robert</dc:creator><pubDate>Sun, 28 Sep 2008 21:14:22 -0000</pubDate></item><item><title>Re: Mocking internal interfaces with Moq</title><link>http://blog.ashmind.com/index.php/2008/05/09/mocking-internal-interfaces-with-moq/#comment-2624599</link><description>Great, I was looking for that everywhere! Thanx!!!</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator><pubDate>Thu, 25 Sep 2008 13:28:55 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2622911</link><description>Good review, thanks for taking the time to do it.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Colin Jack</dc:creator><pubDate>Thu, 25 Sep 2008 09:26:16 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2621226</link><description>The use case is to create a factory which registers several factory-specific components without polluting the original container with these components and their local scope dependencies (such as connection data). I describe the problem in detail at  &lt;a href="http://blog.ashmind.com/index.php/2008/06/23/di-framework-challenges-1-simple-factories/"&gt;http://blog.ashmind.com/index.php/2008/06/23/di...&lt;/a&gt; .&lt;br&gt;&lt;br&gt;So, if I can create a container in place and then throw it away, it also solves the pollution problem.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Thu, 25 Sep 2008 06:29:47 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2589469</link><description>On IService[] - point taken, issue raised. In the meantime you can do:&lt;br&gt;&lt;br&gt;builder.Register(c =&amp;gt; c.Resolve&amp;lt;IEnumerable&amp;lt;X&amp;gt;&amp;gt;().ToArray());&lt;br&gt;&lt;br&gt;..in order to adapt the default collection type onto an array type.&lt;br&gt;&lt;br&gt;I'll look into the non-generic collection registrations - may look into that in the future if there is demand.&lt;br&gt;&lt;br&gt;Thanks for the feedback!</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nicholas Blumhardt</dc:creator><pubDate>Thu, 25 Sep 2008 03:29:51 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2578161</link><description>The net effect is almost the same. RegisterTypesMatching() and RegisterTypesAssignableTo() are lazy - there is no scan of loaded assemblies, for instance.&lt;br&gt;&lt;br&gt;You could always create an extension method ResolveUnregistered() which could check/register first, too.&lt;br&gt;&lt;br&gt;Not sure what you mean about hierarchical containers relating to this use case - can you clarify a little?</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nicholas Blumhardt</dc:creator><pubDate>Wed, 24 Sep 2008 21:12:26 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2541361</link><description>Definitely not all, I think I'll add a test for that at some point.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Tue, 23 Sep 2008 14:28:36 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2539357</link><description>Nice comparison! I didn't know that there where so many IoC frameworks :)&lt;br&gt;&lt;br&gt;Do you know if all containers support registering services/components at any given time?&lt;br&gt;I know Castle can do that, i'm abusing it a bit in my current project.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">alwin</dc:creator><pubDate>Tue, 23 Sep 2008 10:43:11 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2539227</link><description>Sure, I like the second approach much more.&lt;br&gt;&lt;br&gt;By the way, is it possible to resolve unregistered types in Autofac?&lt;br&gt;I do not feel that is very important, given hierarchical containers, but I am still interested.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Tue, 23 Sep 2008 10:11:07 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2539207</link><description>Thanks!&lt;br&gt;&lt;br&gt;You have a very interesting implementation.&lt;br&gt;I would prefer to have an automatic registration by default, since if I get into situation where I would need more than one ILogger collection, I would probably use some kind of contextual override for a requiring component anyway. But it is a question of preference.&lt;br&gt;&lt;br&gt;There are only two things that I feel are missing in your implementation -- support for IService[] (since it is simplest way to define collection dependency) and and ability to register collections using non-generic API.&lt;br&gt;&lt;br&gt;Due to the first one, I can not update tests to pass right now, however, I had fixed the chart and will fix the post text as well.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Tue, 23 Sep 2008 10:07:50 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2525027</link><description>Cool, great work!&lt;br&gt;&lt;br&gt;I think I can't update in-post chart, since it'll require me to update post text as well, and that would mean I have to consider and mention all other framework updates.&lt;br&gt;I am looking for a way to keep an up-to-date version of charts at the net-ioc-frameworks page of Google Code, I hope to do it soon enough.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Mon, 22 Sep 2008 20:50:55 -0000</pubDate></item><item><title>Re: Programming is complex: HTML5 data-*</title><link>http://blog.ashmind.com/index.php/2008/09/21/programming-is-complex-html5-data/#comment-2524184</link><description>Eugenics aims to solve merely one: the devolution of our civilisation. That this is happening, and that it is a logical outcome of the egalitarian "political correctness" that our society is obsessed with, is a verifiable fact.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ian Hickson</dc:creator><pubDate>Mon, 22 Sep 2008 19:51:40 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2520137</link><description>Aaah - and regarding automatic registration - you can always do:&lt;br&gt;&lt;br&gt;builder.RegisterTypesAssignableTo&amp;lt;object&amp;gt;();&lt;br&gt;&lt;br&gt;:) Not really recommendable though.&lt;br&gt;&lt;br&gt;I recently ported some Prism code from Unity to Autofac, and used something similar to:&lt;br&gt;&lt;br&gt;builder.RegisterTypesMatching(t =&amp;gt; t.Name.EndsWith("View"));&lt;br&gt;&lt;br&gt;--- just to illustrate that there is no need to use tagging interfaces or inheritance in order to work with this feature.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nicholas Blumhardt</dc:creator><pubDate>Mon, 22 Sep 2008 14:42:40 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2520060</link><description>Hi Andrey,&lt;br&gt;&lt;br&gt;Wow! It is very interesting to see a methodical approach to this comparison.&lt;br&gt;&lt;br&gt;Autofac does also support list registrations - but like 'resolve anything' you have to opt-in. See: &lt;a href="http://code.google.com/p/autofac/wiki/Collections"&gt;http://code.google.com/p/autofac/wiki/Collections&lt;/a&gt;.&lt;br&gt;&lt;br&gt;As you've hinted at - like most containers you can change this behaviour by writing custom extensions. In general, you'll find Autofac is very conservative about working absolutely predictably by default.&lt;br&gt;&lt;br&gt;Cheers,&lt;br&gt;&lt;br&gt;Nick</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nicholas Blumhardt</dc:creator><pubDate>Mon, 22 Sep 2008 14:36:11 -0000</pubDate></item><item><title>Re: Programming is complex: HTML5 data-*</title><link>http://blog.ashmind.com/index.php/2008/09/21/programming-is-complex-html5-data/#comment-2516979</link><description>ASP.NET was a solution that was expected to be 'simple for developers'. Just drag&amp;drop some things and get the work done.&lt;br&gt;That worked, to some extent. In the same way the data-* would work, as long as the task is not complex enough.&lt;br&gt;&lt;br&gt;ASP.NET MVC is the flexible solution. For some people, it might not be as easy to use or understand as original ASP.NET.&lt;br&gt;However flexibility has proven to be very important, important enough for Microsoft to spend time and resources to develop it.&lt;br&gt;Would the original ASP.NET be created, if Microsoft started with ASP.NET MVC? I am not sure.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Mon, 22 Sep 2008 08:24:35 -0000</pubDate></item><item><title>Re: Programming is complex: HTML5 data-*</title><link>http://blog.ashmind.com/index.php/2008/09/21/programming-is-complex-html5-data/#comment-2516938</link><description>People who write awesome JavaScript code _are_ programmers. Their job may be named 'designer', but it is a misnomer.&lt;br&gt;If a person writes good JavaScript, then he is a JavaScript programmer, and people writing really good JavaScript have no problems understanding complex things -- namespaces are a piece of cake compared to prototypes.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Mon, 22 Sep 2008 08:14:48 -0000</pubDate></item><item><title>Re: Programming is complex: HTML5 data-*</title><link>http://blog.ashmind.com/index.php/2008/09/21/programming-is-complex-html5-data/#comment-2515612</link><description>Hmm,  I believe you're mixing up several completely unrelated topics.  X/HTML 5 is not for the programmer and therefore should be as simple as possible, even if it means mimicking XML functionality.  The paragraphs about standards (language stuff) and ASP.NET MVC are completely unrelated to the X/HTML 5 debate.  While data-* is about programming, you may want to ask yourself how many web designers are not programmers, nevertheless, writing awesome JavaScript code?  data-* is made for them not primarily for programmers in its conventional perception.&lt;br&gt;&lt;br&gt;Additionally, I do not fully understand the last paragraph.  What are you trying to say?  What does ease of use have to do with ASP.NET MVC?  It's a design pattern, not more.  More importantly, it is something that exists in other languages for ages which MS thought of being completely unnecessary.  MVC is neither an "easy solution" nor a "shortcut" of some kind.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Steve</dc:creator><pubDate>Mon, 22 Sep 2008 07:33:08 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2515363</link><description>Hi Andrey,&lt;br&gt;&lt;br&gt;If you take a look at the updated version of your test project, you'll notice that LinFu passes every test in both "MustHave" and "ShouldHave" categories--all from an assembly that is only about 94KB in size! :)&lt;br&gt;&lt;br&gt;If you can, please update your charts accordingly. Thanks!</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Philip Laureano</dc:creator><pubDate>Mon, 22 Sep 2008 06:34:52 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2506115</link><description>Good idea! I supposed that all frameworks that support list injection for constructors support them for properties as well.&lt;br&gt;But documenting assumptions this in a testable way is always a good idea. I'll do this.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Sun, 21 Sep 2008 09:39:20 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2506100</link><description>Thanks, Andrey! I went ahead and added the LinFuAdapter to the test suite.&lt;br&gt;&lt;br&gt;Btw, you might want to add property service list injection as one of the "should haves" for IoC container features. For example, if I have a service instance with a property such as:&lt;br&gt;&lt;br&gt;[SomeCustomPropertyInjectionAttribute] // This differs with every IoC container&lt;br&gt;public ISomeServices[] MyServices { get; set; }&lt;br&gt;&lt;br&gt;It would be nice to have the container automatically instantiate the existing list of ISomeService instances from the container and inject it to the MyServices property. What do you think?</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Philip Laureano</dc:creator><pubDate>Sun, 21 Sep 2008 09:35:47 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2506088</link><description>Sure, it's a thing I forgot to do correctly.&lt;br&gt;There is already a Create&amp;lt;T&amp;gt; method in the IFrameworkAdapter, but test did not use it.&lt;br&gt;I have just modified the test to use Create&amp;lt;T&amp;gt; instead of Resolve&amp;lt;T&amp;gt;.&lt;br&gt;&lt;br&gt;So get the latest version, then implement Create&amp;lt;T&amp;gt; using AutoCreate.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ashmind</dc:creator><pubDate>Sun, 21 Sep 2008 09:31:09 -0000</pubDate></item><item><title>Re: Comparing .NET DI (IoC) Frameworks, Part 2</title><link>http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/#comment-2505974</link><description>&lt;i&gt;Unregistered Resolution is an ability to reuse container resolution logic for a given concrete type, without polluting the container itself with this type.&lt;/i&gt;&lt;br&gt;&lt;br&gt;Ahh, I see! Now that you've mentioned it, LinFu *does* support unregistered resolution, but its not implemented quite the same way as other contains would implement it. For example, if I had an unregistered class like:&lt;br&gt;&lt;br&gt;public class MyClass&lt;br&gt;{&lt;br&gt;     public MyClass(ISomeService service) &lt;br&gt;     {&lt;br&gt;         // ...&lt;br&gt;     }&lt;br&gt;}&lt;br&gt;&lt;br&gt;You can create the unregistered class in LinFu using the following code:&lt;br&gt;&lt;br&gt;// ...construct the container somewhere here&lt;br&gt;container.AddService&amp;lt;ISomeService&amp;gt;(new SomeService());&lt;br&gt;var myClass = (MyClass)container.AutoCreate(typeof(MyClass);&lt;br&gt;&lt;br&gt;Now the tricky part here is that I've been running LinFu through your battery of tests, and I can't seem to get it to pass the UnregisteredResolution test. Is there anyway to modify the logic so that each library has a way to implement their own unregistered resolution? Clumping it all under a single Adapter.Resolve() call doesn't seem to apply, in this case.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Philip Laureano</dc:creator><pubDate>Sun, 21 Sep 2008 08:42:03 -0000</pubDate></item></channel></rss>