<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>ObjectBuilder Forum Rss Feed</title><link>http://www.codeplex.com/Project/ListForums.aspx?ProjectName=ObjectBuilder</link><description>ObjectBuilder Forum Rss Description</description><item><title>New Post: Builder Strategy Order</title><link>http://objectbuilder.codeplex.com/Thread/View.aspx?ThreadId=213610</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I have created the following strategy:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="color:black;background-color:white"&gt;
&lt;pre&gt;    &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;class&lt;/span&gt; TypeMappingStrategyWithoutPolicyId : BuilderStrategy
    {
        &lt;span style="color:gray"&gt;///&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:gray"&gt;///&lt;/span&gt;&lt;span style="color:green"&gt; Implementation of &amp;lt;see cref=&amp;quot;IBuilderStrategy.BuildUp&amp;quot;/&amp;gt;.&lt;/span&gt;
        &lt;span style="color:gray"&gt;///&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;override&lt;/span&gt; &lt;span style="color:blue"&gt;object&lt;/span&gt; BuildUp(IBuilderContext context, Type t, &lt;span style="color:blue"&gt;object&lt;/span&gt; existing, &lt;span style="color:blue"&gt;string&lt;/span&gt; id)
        {
            DependencyResolutionLocatorKey result = &lt;span style="color:blue"&gt;new&lt;/span&gt; DependencyResolutionLocatorKey(t, id);

            ITypeMappingPolicy policy = context.Policies.Get&amp;lt;ITypeMappingPolicy&amp;gt;(t, &lt;span style="color:blue"&gt;null&lt;/span&gt;);

            &lt;span style="color:blue"&gt;if&lt;/span&gt; (policy != &lt;span style="color:blue"&gt;null&lt;/span&gt;)
            {
                result = policy.Map(result);
                TraceBuildUp(context, t, id, Properties.Resources.TypeMapped, result.Type, result.ID ?? &lt;span style="color:#a31515"&gt;&amp;quot;(null)&amp;quot;&lt;/span&gt;);
                Guard.TypeIsAssignableFromType(t, result.Type, t);

                &lt;span style="color:blue"&gt;return&lt;/span&gt; context.HeadOfChain.BuildUp(context, result.Type, existing, id);
            }

            &lt;span style="color:blue"&gt;return&lt;/span&gt; &lt;span style="color:blue"&gt;base&lt;/span&gt;.BuildUp(context, result.Type, existing, id);
        }
    }
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The instruction :&lt;/p&gt;
&lt;pre style="color:#000000;font-family:Consolas, 'Courier New', Courier, monospace;font-size:1em;margin:8px"&gt;&lt;div style="color:black;background-color:white"&gt;&lt;pre&gt;context.HeadOfChain.BuildUp(context, result.Type, existing, id);&lt;/pre&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;p&gt;reinsert the mapped type in ObjectBuilder &amp;quot;pipeline&amp;quot; resolving the dependency.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The policy for mapping is:&lt;/p&gt;
&lt;div style="color:black;background-color:white"&gt;
&lt;pre&gt;Builder.Policies.Set&amp;lt;ITypeMappingPolicy&amp;gt;(&lt;span style="color:blue"&gt;new&lt;/span&gt; TypeMappingPolicy(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(SplashView), &lt;span style="color:blue"&gt;null&lt;/span&gt;), &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(ISplashView), &lt;span style="color:blue"&gt;null)&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description><author>gigiabbrescia</author><pubDate>Thu, 14 Oct 2010 13:54:06 GMT</pubDate><guid isPermaLink="false">New Post: Builder Strategy Order 20101014015406P</guid></item><item><title>New Post: Builder Strategy Order</title><link>http://objectbuilder.codeplex.com/Thread/View.aspx?ThreadId=213610</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;The Composite Application UI Block (CAB) uses Object Builder for dependency injection.&amp;nbsp; I faced a problem when trying to unit test certain areas of CAB as they reference concrete implementations of views and services such as the following line of code;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:#2b91af"&gt;ISplashView&lt;/span&gt;&lt;span style="font-size:10pt"&gt; splashView = WorkItem.SmartParts.AddNew&amp;lt;&lt;span style="color:#2b91af"&gt;SplashView&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Object Builder is used to create and return an instance of the SplashView.&lt;/p&gt;
&lt;p&gt;My approach was to create a new builder strategy for Object Builder that occurred at the stage of PreCreation.&amp;nbsp; My strategy uses mappings between interfaces and concrete classes from the application configuration file in order to build the correct object &amp;ndash; so my code now looks like the following;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:#2b91af"&gt;ISplashView&lt;/span&gt;&lt;span style="font-size:10pt"&gt; splashView = WorkItem.SmartParts.AddNew&amp;lt;&lt;span style="color:#2b91af"&gt;ISplashView&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The splash view can now be mocked and the class becomes unit testable and the assemblies less tightly coupled.&lt;/p&gt;
&lt;p&gt;It all works fine apart from the property based dependency injection (which doesn&amp;rsquo;t work at all).&amp;nbsp; Object Builder allows you to add several attributes to properties to allow them to be set by Object Builder, for example;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt"&gt;[&lt;span style="color:#2b91af"&gt;CreateNew&lt;/span&gt;]&lt;br&gt;&lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SplashViewPresenter&lt;/span&gt; Presenter&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;{&lt;/span&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _presenter = &lt;span style="color:blue"&gt;value&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _presenter.View = &lt;span style="color:blue"&gt;this&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I'm aware that there is a &lt;span style="color:#000000"&gt;strategy available out of the box called TypeMappingStrategy, however, the mapping is done in code so we still end up with non unit testable code.&amp;nbsp; It also means we need to create a policy for each type we wish to build so it would be a reasonable amount of code.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;From what I understand, there is a builder strategy that is responsible for setting these properties using reflection.&amp;nbsp; This strategy is also in the PreCreation stage.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I think that the reason its not working with my strategy is down to the order that the strategies are executed.&amp;nbsp; Mine would have to be the first one to run as it is essentially changing the type that we are trying to build.&amp;nbsp; If the strategy responsible for setting the properties ran before mine, it would be running on the interface and not the concrete class.&lt;/p&gt;
&lt;p&gt;If that assumption is true then the simple fix would be to re-order the strategies to ensure that mine was the first to run, however, I can&amp;rsquo;t find a way to do it.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br&gt;Steve.&lt;/p&gt;&lt;/div&gt;</description><author>stephencampling</author><pubDate>Mon, 24 May 2010 08:32:01 GMT</pubDate><guid isPermaLink="false">New Post: Builder Strategy Order 20100524083201A</guid></item><item><title>New Post: Is ObjectBuilder dead?</title><link>http://objectbuilder.codeplex.com/Thread/View.aspx?ThreadId=23947</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;&amp;gt;&amp;gt;The ObjectBuiler2 project being used by Unity is an adaptation of (and dramatic departure from, IMO) the work Scott and I did here.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I think Chris already integrated ObjectBuilder into Unity so Unity can run without OB dll. Does it means OB is dead now?&lt;/p&gt;&lt;/div&gt;</description><author>michaelsync</author><pubDate>Wed, 03 Feb 2010 07:54:17 GMT</pubDate><guid isPermaLink="false">New Post: Is ObjectBuilder dead? 20100203075417A</guid></item><item><title>New Post: What would you like in OB 2.0?</title><link>http://objectbuilder.codeplex.com/Thread/View.aspx?ThreadId=456</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I would like to see performance improvements with the PolicyList.Set; I think it has been changed copy the policy dictionary to prevent multi-threading issues so locks don't need to be carried around. &amp;nbsp;This has killed performance in our application when using Unity IoC and resolving components which are not singletons. &amp;nbsp;While the copy took a lot of time, an even bigger issue was the pressure put on the GC. &amp;nbsp;When we optimized our code to use unity to resolve the whole dependency chain, we cut our PolicyList.Set calls down by a factor of 3, there were 3 dependencies in the chain. &amp;nbsp;This not only cut resolution time down it cut our %GC time from 30% to 0.5%. &amp;nbsp;That alone was one of the biggest saving graces.&lt;/p&gt;&lt;/div&gt;</description><author>abombss</author><pubDate>Mon, 28 Dec 2009 19:39:08 GMT</pubDate><guid isPermaLink="false">New Post: What would you like in OB 2.0? 20091228073908P</guid></item><item><title>New Post: What would you like in OB 2.0?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=456</link><description>&lt;div style="line-height: normal;"&gt;Update: I just realized someone else had suggested this. Pls ignore mine:&lt;br&gt;
&lt;a href="http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=2256"&gt;http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=2256&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
Here's something I could think of. I apologize if ultimately some or all of this may be irrelevant due to the fact that I'm just getting my feet wet with this framework.&lt;br&gt;
This enhancement relates to ReflectionStrategy and its derivatives. &lt;br&gt;
It would be nice if after a Type is reflected for its contracutors/methods/properties that need some sort of injection, this information be cached. By that i don't mean the object but rather the type's injection points. The next object to be built from the same type would not have be wait for the whole reflection to take place again.&lt;br&gt;
jeff 
&lt;/div&gt;</description><author>jeffsaremi</author><pubDate>Thu, 25 Dec 2008 17:37:32 GMT</pubDate><guid isPermaLink="false">New Post: What would you like in OB 2.0? 20081225053732P</guid></item><item><title>New Post: The Contrast between "object existing" and BuilderStage.PreCreation</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=43011</link><description>&lt;div style="line-height: normal;"&gt;Before the creation of an object that is the BuilderStag.PreCreation, what is it that is being passed as &amp;quot;existing&amp;quot; in the BuildUp method? Are we supposed to have an object before it's being created? What sort of object is that? &lt;br&gt;
thanks&lt;br&gt;
jeff
&lt;/div&gt;</description><author>jeffsaremi</author><pubDate>Thu, 25 Dec 2008 17:25:40 GMT</pubDate><guid isPermaLink="false">New Post: The Contrast between "object existing" and BuilderStage.PreCreation 20081225052540P</guid></item><item><title>New Post: What Does SingletonStrategy do?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=43010</link><description>&lt;div style="line-height: normal;"&gt;If someone could direct me to any material explaining what SingletonStrategy does and why it's needed I'd appreciate it.&lt;br&gt;
It looks like that CreationStrategy already handles Singletons.&lt;br&gt;
thanks&lt;br&gt;
jeff
&lt;/div&gt;</description><author>jeffsaremi</author><pubDate>Thu, 25 Dec 2008 17:22:11 GMT</pubDate><guid isPermaLink="false">New Post: What Does SingletonStrategy do? 20081225052211P</guid></item><item><title>New Post: Why is OB not DI container but a "framework"?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=24276</link><description>&lt;div style="line-height: normal;"&gt;i dont know either but this article explains well what the OB is:&lt;br&gt;
&lt;a href="http://www.tavaresstudios.com/Blog/post/Deconstructing-ObjectBuilder-What-Is-ObjectBuilder.aspx"&gt;http://www.tavaresstudios.com/Blog/post/Deconstructing-ObjectBuilder-What-Is-ObjectBuilder.aspx&lt;/a&gt;
&lt;/div&gt;</description><author>jeffsaremi</author><pubDate>Thu, 25 Dec 2008 16:52:00 GMT</pubDate><guid isPermaLink="false">New Post: Why is OB not DI container but a "framework"? 20081225045200P</guid></item><item><title>New Post: What would you like in OB 2.0?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=456</link><description>&lt;div style="line-height: normal;"&gt;i totally agree with 'hpcd29' and the stuff he/she requested.&lt;br&gt;
i see attributes to not be productive at all
&lt;/div&gt;</description><author>jeffsaremi</author><pubDate>Thu, 25 Dec 2008 16:49:00 GMT</pubDate><guid isPermaLink="false">New Post: What would you like in OB 2.0? 20081225044900P</guid></item><item><title>New Post: Does anyone use Microsoft.Practices.ObjectBuilder2 standalone?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=39608</link><description>&lt;div style="line-height: normal;"&gt;Hey folks. Quick question for you: is anyone in the OB community using the p&amp;amp;p version of OB2 that ships with the Unity container &amp;amp; entlib 4? Right now, I don't know of any, and if nobody is I'm going to merge the OB2 and Unity assemblies to simplify deployment. Would this cause heartburn for anyone?&lt;br&gt;
&lt;br&gt;
Thanks,&lt;br&gt;
&lt;br&gt;
-Chris&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;</description><author>ctavares</author><pubDate>Mon, 10 Nov 2008 17:59:05 GMT</pubDate><guid isPermaLink="false">New Post: Does anyone use Microsoft.Practices.ObjectBuilder2 standalone? 20081110055905P</guid></item><item><title>NEW POST: BuilderAware attribute</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=24613</link><description>&lt;div class="wikidoc"&gt;
I read the a discussion regarding performance an ObjectBuilder. That got me thinking along the lines of a builder aware attribute.&lt;br /&gt; &lt;br /&gt;Often what I do when I implement a new strategy is that I've created an attribute that I wish should have semantics.&lt;br /&gt; &lt;br /&gt;The process of the strategy is usually: iterate over all member infos, locate my attribute, perform action (depending on buildup or teardown).&lt;br /&gt; &lt;br /&gt;I aimed to encapsulate this process in a builder aware attribute strategy. The benefit is also that since this strategy knows its working with builder aware attributes it scans and caches those that it finds. So the next time the same type is encountered it just loops over an array calling the buildup and teardown methods on the attribute. This should give an increased performance over having seperate strategies for each attribute. &lt;br /&gt; &lt;br /&gt;I don't think this is a one size fits all solution to all strategies and this is only a rough beginning. However I thought it turned out rather nicely so I though I shared this with you.&lt;br /&gt; &lt;br /&gt;My simplistic test case.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
   /// &amp;lt;summary&amp;gt;
   /// MyBuilderAwareAttribute implements IBuilderAwareAttribute, it then gets buildup and teardown
   /// &amp;lt;/summary&amp;gt;
   [AttributeUsage(AttributeTargets.Property)]
   public class MyBuilderAwareAttribute : Attribute, IBuilderAwareAttribute
   {
      public object BuildUp(IBuilderContext context, object buildKey, object existing, object attribute, MemberInfo memberInfo)
      {
         // Inject &amp;quot;Test&amp;quot;
         var l_pi = (PropertyInfo)memberInfo;
 
         l_pi.SetValue(existing, &amp;quot;Test&amp;quot;, null);
 
         return existing;
      }
 
      public object TearDown(IBuilderContext context, object item, object attribute, MemberInfo memberInfo)
      {
         return item;
      }
   }
 
   public class MyClass
   {
      /// &amp;lt;summary&amp;gt;
      /// Inject &amp;quot;Test&amp;quot;
      /// &amp;lt;/summary&amp;gt;
      [MyBuilderAware]
      public string Name
      {
         get;
         set;
      }
   }
 
   public static class Assert2
   {
      public static void True(
         Expression&amp;lt;Func&amp;lt;bool&amp;gt;&amp;gt; assert)
      {
         if (!assert.Compile()())
         {
            Assert.True(
               false,
               assert.Body.ToString());
         }
      }
   }
 
   public class BuilderAwareAttributeStrategyTest
   {
      [Fact]
      public void BuildCallsClassWithInterface()
      {
         var strategy = new BuilderAwareAttibuteStrategy();
         var context = new MockBuilderContext();
 
         context.Strategies.Add(strategy);
 
         var l_object = new MyClass();
 
         context.HeadOfChain.BuildUp(context, typeof(MyClass), l_object);
 
         // Validate property value indeed is &amp;quot;Test&amp;quot;
         Assert2.True(() =&amp;gt; l_object.Name == &amp;quot;Test&amp;quot;);
      }
 
   } 
&lt;/pre&gt;The interface&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
   public interface IBuilderAwareAttribute
   {
      object BuildUp(
         IBuilderContext context, 
         object buildKey, 
         object existing,
         object attribute,
         MemberInfo memberInfo);
 
      object TearDown(
         IBuilderContext context, 
         object item,
         object attribute,
         MemberInfo memberInfo);
      }
&lt;/pre&gt; &lt;br /&gt;The strategy&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
   public class BuilderAwareAttibuteStrategy : BuilderStrategy
   {
      struct CachedAttributeData
      {
         public IBuilderAwareAttribute Attribute;
         public MemberInfo MemberInfo;
      }
 
      readonly Dictionary&amp;lt;
         Type,
         CachedAttributeData[]&amp;gt; m_cache = new Dictionary&amp;lt;
            Type,
            CachedAttributeData[]&amp;gt;();
 
      static CachedAttributeData[] BuildCacheElement(Type t)
      {
         var l_result = new List&amp;lt;CachedAttributeData&amp;gt;();
 
         var l_member_infos = t.GetMembers(
            BindingFlags.Instance
            |  BindingFlags.NonPublic
            |  BindingFlags.Public
            );
 
         for (var l_iter = 0; l_iter &amp;lt; l_member_infos.Length; ++l_iter)
         {
            var l_member_info = l_member_infos[l_iter];
            var l_attributes = l_member_info.GetCustomAttributes(true);
 
            for (var l_ita = 0; l_ita &amp;lt; l_attributes.Length; ++l_ita)
            {
               var l_attribute = l_attributes[l_ita] as IBuilderAwareAttribute;
 
               if (l_attribute != null)
               {
                  l_result.Add(new CachedAttributeData
                     {
                        Attribute = l_attribute,
                        MemberInfo = l_member_info,
                     });
               }
            }
         }
 
         return l_result.ToArray();
      }
 
      CachedAttributeData[] Lookup(Type t)
      {
         lock (m_cache)
         {
            CachedAttributeData[] l_result;
            if (m_cache.TryGetValue(
               t,
               out l_result))
            {
               return l_result;
            };
         }
 
         var l_new = BuildCacheElement(t);
 
         lock (m_cache)
         {
            // Potentially overwrites a duplicate value but it 
            // should be identical due to the immutability of Type
            m_cache[t] = l_new;
         }
 
         return l_new;
      }
 
      public override object BuildUp(IBuilderContext context, object buildKey, object existing)
      {
         var l_cached = Lookup(existing.GetType());
 
         for (var l_iter = 0; l_iter &amp;lt; l_cached.Length; ++l_iter)
         {
            var l_item = l_cached[l_iter];
 
            l_item.Attribute.BuildUp(
               context,
               buildKey,
               existing,
               l_item.Attribute,
               l_item.MemberInfo);
         }
 
         return base.BuildUp(context, buildKey, existing);
      }
 
      public override object TearDown(IBuilderContext context, object item)
      {
         var l_cached = Lookup(item.GetType());
 
         for (int l_iter = 0; l_iter &amp;lt; l_cached.Length; ++l_iter)
         {
            var l_item = l_cached[l_iter];
 
            l_item.Attribute.TearDown(
               context,
               item,
               l_item.Attribute,
               l_item.MemberInfo);
         }
 
         return base.TearDown(context, item);
      }
   }
&lt;/pre&gt;Comments?&lt;br /&gt;
&lt;/div&gt;</description><author>marten_range</author><pubDate>Mon, 24 Mar 2008 23:13:40 GMT</pubDate><guid isPermaLink="false">NEW POST: BuilderAware attribute 20080324111340P</guid></item><item><title>NEW POST: What would you like in OB 2.0?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=456</link><description>&lt;div class="wikidoc"&gt;
 Derek:&lt;br /&gt; &lt;br /&gt;I do agree with keeping the ObjectBuilder lean and mean. That's a big strength to it. But I wouldn't mind being able to download good and maintained implementations for interception or event broking together with OB. That's what I liked about OB 2 that the interception and event broking (and indeed also the injection part) was seperate from the core. Personally in my case I've certain restraints to how events can be broked so I can't probably use a general event mechanism. So I very much would like to not include the standard event broking in OB 2.0 in my project.&lt;br /&gt; &lt;br /&gt;Still I see benefits of including such functionality, if nothing else as a good example on how to do it yourself if it shouldn't fit in your case.&lt;br /&gt; &lt;br /&gt;Regarding Prism. That's sounds very interesting. Especially the part about getting compile-time errors because that's a weakness in how its done in CAB IMO (There are lots of strenghts that outweighs that weakness but a weakness nonetheless)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
&lt;/div&gt;</description><author>marten_range</author><pubDate>Mon, 24 Mar 2008 15:03:58 GMT</pubDate><guid isPermaLink="false">NEW POST: What would you like in OB 2.0? 20080324030358P</guid></item><item><title>NEW POST: What would you like in OB 2.0?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=456</link><description>&lt;div class="wikidoc"&gt;
One implementation detail I would recommend including with Object Builder is the simplest of facades that would serve as a container.  If it had an instance based &amp;quot;ObjectFactory&amp;quot; type whose default constructor created default instances of the lifetime container, locator, and builder then it could be used out of the box.  An object just such as this is what I've used as my container for several years now.   As simple as this sounds, if the first version had provided a facade like this then I really feel Object Builder would have taken off a lot more than it did.  I think the &amp;quot;assembly required&amp;quot; aspect of Object Builder prevented a lot of people from diving in.  Of course, with Enterprise Library 4.0 we will finally have an out of the box container for Object Builder, so I expect 90% of people's exposure to Object Builder will be through Enterprise Library.  Nevertheless, I think it would be good to have something that allows it to work out of the box for those few who download it directly.&lt;br /&gt; &lt;br /&gt;Derek&lt;br /&gt;
&lt;/div&gt;</description><author>derekgreer</author><pubDate>Mon, 24 Mar 2008 02:08:20 GMT</pubDate><guid isPermaLink="false">NEW POST: What would you like in OB 2.0? 20080324020820A</guid></item><item><title>NEW POST: What would you like in OB 2.0?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=456</link><description>&lt;div class="wikidoc"&gt;
In my opinion, Object Builder shouldn't be bundled with an Event Broker.   Object Builder should be kept lean and extensible, not bundled with implementation features.  An event broker falls into an application library category, similar to having a service registry, command registry, etc.  If the OB tam wants to make another Event Broker available then I would recommend making it a separate download bundle.&lt;br /&gt; &lt;br /&gt;If you want a stand alone Event Broker then I would recommend waiting on Prism.  Like CAB, Prism will contain a suite of application infrastructure components.  Unlike CAB, one of the design goals of Prism is to make these components capable of being used independently.  While I don't think the latest drop has an Event Broker yet, one is in the works.  The preliminary design is to create a non-DI based broker which is delegate based rather than event based and uses interfaces as contracts rather than string-based event names.  This is more efficient given you won't need to run objects through an EventBrokerStrategy and do reflection, will offer compile time type checking for both the contract and the EventArgs (i.e. no magic stirngs to get wrong and you can't get the wrong EventArgs type), and does away with the need for any weak reference maintenance.&lt;br /&gt; &lt;br /&gt;Derek&lt;br /&gt;
&lt;/div&gt;</description><author>derekgreer</author><pubDate>Mon, 24 Mar 2008 01:56:19 GMT</pubDate><guid isPermaLink="false">NEW POST: What would you like in OB 2.0? 20080324015619A</guid></item><item><title>NEW POST: What would you like in OB 2.0?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=456</link><description>&lt;div class="wikidoc"&gt;
I too like to see some configuration but I don't necessary think the Spring way is necessarily the best way. I love the attributed part of OB I think it gives great clarity. I would be satisified if there was some standard way to add/remove strategies and policies.&lt;br /&gt; &lt;br /&gt;I'm also excited about the work been done with OB2.0. I think it is great to add event broking and interception to OB. As documented the eventbroking is simpler then the CAB variant. However, one of the truly brilliant benefits of CAB events was the possibility to add restrictions on the event sink. Ie run sink in publisher/background or GUI thread. I wish that for OB2.0, possible extensible also. Also, the event hierarchies like in CAB are extremely powerful (ie publish down a tree).&lt;br /&gt; &lt;br /&gt;In conclusion I would like to add that at my company we are releasing a new way to develop functionality for our big ERP application written in C++. Future programmer will use .NET instead. A very important component for us in order to reduce coupling and increase testability is of course the ObjectBuilder. I stuck out my neck a little bit when I pushed for using OB as many programmers here are very new to IOC. However, OB has worked flawlessly and people are now seeing the benefits.&lt;br /&gt; &lt;br /&gt;So thank you for this great technology.&lt;br /&gt;
&lt;/div&gt;</description><author>marten_range</author><pubDate>Sun, 23 Mar 2008 22:13:48 GMT</pubDate><guid isPermaLink="false">NEW POST: What would you like in OB 2.0? 20080323101348P</guid></item><item><title>NEW POST: Why is OB not DI container but a "framework"?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=24276</link><description>&lt;div class="wikidoc"&gt;
In lots places, including this project's home page, I read: OB is not a DI container but a framework for building DI systems. Can anyone explain why? &lt;br /&gt;
&lt;/div&gt;</description><author>carballosa</author><pubDate>Tue, 18 Mar 2008 16:19:29 GMT</pubDate><guid isPermaLink="false">NEW POST: Why is OB not DI container but a "framework"? 20080318041929P</guid></item><item><title>NEW POST: Is ObjectBuilder dead?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=23947</link><description>&lt;div class="wikidoc"&gt;
Cool!&lt;br /&gt;That's good news to me, 'cause I like the work you did and I would appreciate to see an adaption of ObjectBuilder2 in a major community product, like CAB/SCSF (reloaded) und EntLib.&lt;br /&gt;Now this will happen with Unity and its integration within EntLib.&lt;br /&gt;
&lt;/div&gt;</description><author>MatthiasFG</author><pubDate>Mon, 17 Mar 2008 07:01:05 GMT</pubDate><guid isPermaLink="false">NEW POST: Is ObjectBuilder dead? 20080317070105A</guid></item><item><title>NEW POST: Is ObjectBuilder dead?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=23947</link><description>&lt;div class="wikidoc"&gt;
I think you're overstating the departure. All the basics of OB are still in place, and a lot of the fundamental architectural improvements you made (hierarchical policy lists &amp;amp; strategy chains, for example) are all still present.&lt;br /&gt; &lt;br /&gt;Yes, we did add new strategies that work radically different than the original onces. But that was done specifically to address performance issues, things that p&amp;amp;p customer have been complaining about for years. And yes, I did change the IBuilderStrategy interface. That was to improve debuggability. Neither of these things were on your original radar; I expect if they were you would have ended up in close to the same spot.&lt;br /&gt; &lt;br /&gt;The interception and event broker stuff aren't in there, granted, but I thought that was the whole point of having them in separate assemblies? While I doubt a standard event broker will be part of the core package, we will be doing an interception system as an extension, and it'll probably be based on what you did (which, in turn, was based on what I did. :-) ).&lt;br /&gt;
&lt;/div&gt;</description><author>ctavares</author><pubDate>Mon, 17 Mar 2008 06:59:46 GMT</pubDate><guid isPermaLink="false">NEW POST: Is ObjectBuilder dead? 20080317065946A</guid></item><item><title>NEW POST: Is ObjectBuilder dead?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=23947</link><description>&lt;div class="wikidoc"&gt;
Yes it will stay in place.  We will see what happens over time.&lt;br /&gt;
&lt;/div&gt;</description><author>scottden</author><pubDate>Mon, 17 Mar 2008 02:08:52 GMT</pubDate><guid isPermaLink="false">NEW POST: Is ObjectBuilder dead? 20080317020852A</guid></item><item><title>NEW POST: Is ObjectBuilder dead?</title><link>http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=23947</link><description>&lt;div class="wikidoc"&gt;
The ObjectBuiler2 project being used by Unity is an adaptation of (and dramatic departure from, IMO) the work Scott and I did here.&lt;br /&gt;
&lt;/div&gt;</description><author>BradWilson</author><pubDate>Mon, 17 Mar 2008 01:08:40 GMT</pubDate><guid isPermaLink="false">NEW POST: Is ObjectBuilder dead? 20080317010840A</guid></item></channel></rss>