<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Sampy's Blog</title>
  <icon>http://sampy.com/Content/icons/mushroom.ico</icon>
  <logo>http://sampy.com/Content/icons/mushroom.png</logo>
  <updated>2009-03-12T07:28:21</updated>
  <subtitle type="html">My thoughts</subtitle>
  <id>http://sampy.com/atom</id>
  <link rel="alternate" type="text/html" hreflang="en" href="/atom"/>
  <link rel="self" type="application/atom+xml" href="http://sampy.com/ATOM"/>
  <generator uri="http://oxite.net" version="1.0">Oxite</generator>
  <logo>http://sampy.com/Content/icons/mushroom.png</logo>
  <entry>
    <title type="html">Yeah, I'm a nerd</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/Yeah-Im-a-nerd"/>
    <id>http://sampy.com/Blog/Yeah-Im-a-nerd</id>
    <updated>2009-03-12T14:28:23.007</updated>
    <published>2009-03-12T07:28:21</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="DD" />
    <content type="html" xml:lang="en">
      &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.wizards.com/dnd/class/images/banners/Bard.jpg&quot;/&gt;&lt;p&gt;Bards are artists first and foremost, and they practice magic just as they practice song, drama, or poetry. They have a clear sense of how people perceive reality, so they master charm magic and some illusions. Sagas of great heroes are part of a bard's repertoire, and most bards follow the example of many fables and become skilled in a variety of fields. A bard's artistic ability, knowledge of lore, and arcane might are widely respected, particularly among the world's rulers.&lt;/p&gt;&lt;p&gt;Art and magic share a sublime beauty, and, as a bard, you seek the place where the two meet. You might be a naturally talented wanderer who casts impressive spells almost instinctively, a student of a bardic college who learned ordered systems of magic and epic poetry, a warrior skald who mixes skill at arms with thundering music, a dashing performer known for putting on a good show even for your enemies, or a perfectionist who seeks the consummate formula that blends art and magic into a higher force.&lt;/p&gt;&lt;p&gt;A steady rhythm beats in the back of your mind as you brandish your sword. Your eyes and ears pick up the motion of the villains that surround you, and one glance tells you everything you need to know to defeat them. You whistle three staccato notes, letting your allies know the symphony of battle is about to begin.&lt;/p&gt;&lt;a href=&quot;http://www.wizards.com/dnd/&quot; target=&quot;_blank&quot;&gt;D&amp;D Home Page&lt;/a&gt; - &lt;a href=&quot;http://www.wizards.com/dnd/class/index.asp&quot; target=&quot;_blank&quot;&gt;What Class Are You?&lt;/a&gt; - &lt;a href=&quot;http://www.wizards.com/default.asp?x=dnd/insider/characterbuilder&quot; target=&quot;_blank&quot;&gt;Build A Character&lt;/a&gt; - &lt;a href=&quot;http://www.wizards.com/dndinsider/compendium/database.aspx?searchterm=Bard&quot; target=&quot;_blank&quot;&gt;D&amp;amp;D Compendium&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">My one Alt.Net Seattle Session</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/My-one-AltNet-Seattle-Session"/>
    <id>http://sampy.com/Blog/My-one-AltNet-Seattle-Session</id>
    <updated>2009-03-09T19:54:52.75</updated>
    <published>2009-03-09T12:54:21</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;object width=&quot;400&quot; height=&quot;300&quot;&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://vimeo.com/moogaloop.swf?clip_id=3536845&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1&quot; /&gt;&lt;embed src=&quot;http://vimeo.com/moogaloop.swf?clip_id=3536845&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href=&quot;http://vimeo.com/3536845&quot;&gt;Oxite Retrospective 2&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/alexhung&quot;&gt;Alex Hung&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.
    </content>
  </entry>
  <entry>
    <title type="html">The Oxite Architecture: Good, Bad, and Meh Part 2</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-2"/>
    <id>http://sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-2</id>
    <updated>2009-02-19T21:45:48.973</updated>
    <published>2009-02-19T15:45:48.943</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Architecture" />
    <category term="ActionFilter" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;In &lt;a href=&quot;http://www.sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-1&quot;&gt;Part 1&lt;/a&gt; of this series, I covered how we added DI to our code with the &lt;a href=&quot;http://www.codeplex.com/unity&quot;&gt;Unity&lt;/a&gt; container. There have been plenty of samples out there that did this though. For Part 2, I thought I’d share something we did that I hadn’t seen before: Action Filters without Attributes.&lt;/p&gt;  &lt;h3&gt;Action Filters Classic&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;http://www.asp.net/mvc/&quot;&gt;ASP.NET MVC&lt;/a&gt; out of the box supports the idea of an Action Filter. ScottGu had &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx&quot;&gt;a post detailing Action Filters&lt;/a&gt; way back during Preview 4 and Phil Haack has &lt;a href=&quot;http://www.haacked.com/archive/2008/08/14/aspnetmvc-filters.aspx&quot;&gt;a good filter overview&lt;/a&gt; as well. Go read those real quick because they’re great descriptions of how filters work and my blog follows the DRSGAPH principle (Don’t Repeat Scott Guthrie and Phil Haack).&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Filters allow you to hook up incidental actions to a request with out forcing the code of your controller to do them. Need to do a security check? Use a filter. Want to cache the output? Use a filter. Want to have area based themes? Use a filter. At first glance, it seemed like a great way to make your controller code nice and clean. But while it keeps your methods fit and trim, the space above the signature can become crowded fast:&lt;/p&gt;    &lt;pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;[Authorize(“Admin”)] 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;[Theme] 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;[Cache(CacheTime.Short)] 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;[AdminSideBar] 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; List&amp;lt;Post&amp;gt; GetDrafts(Area area)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;{ 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;span style=&quot;color: #008000&quot;&gt;//real work &lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;}&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;You’ve pulled it out of the code (yay!) but your controller still has to know about all those extra things it needs to do (boo).&lt;/p&gt;

  &lt;h3&gt;&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;h3&gt;The ControllerActionInvoker&lt;/h3&gt;

&lt;p&gt;If you look at the View layer of &lt;a href=&quot;http://www.asp.net/mvc/&quot;&gt;ASP.Net MVC&lt;/a&gt;, you can see that it has the primary view and partial views to handle other parts of the rendering. At first glance, it looks like there isn’t a similar pattern in the controller layer. We considered building our own layer where we would provide our own RouteHandler and ran our own sub-controllers before calling out to the stock MVC controller but this seemed like a lot of work. Then while reading Phil Haack’s post about &lt;a href=&quot;http://haacked.com/archive/0001/01/01/handling-formats-based-on-url-extension.aspx&quot;&gt;handling result formats based on a URL parameter&lt;/a&gt;, I found the ControllerActionInvoker class and the GetFilters method and the solution became clear. (We also did something very similar to what Phil is doing in that post at first before moving it into filters)&lt;/p&gt;

&lt;p&gt;The ControllerActionInvoker is set on each controller when it is created. We’ve already taken over the creation of controllers to enable dependency injection so adding a little more magic there is easy. For those following along in the code, open up OxiteControllerActionInvoker.cs in the Infrastructure folder of the Oxite.MVC project. I’ll give you a second.&lt;/p&gt;

&lt;p&gt;The GetFilters method takes information about the currently executing controller action, the ControllerContext and the ActionDescriptor, and returns a FilterInfo object which contains 4 ordered lists of filters to run as part of executing the actual action method. If you look up at the constructor, you’ll see that an IActionFilterRegistry is passed in. This interface is how you can dynamically assign filters based on give criteria. The Add method takes a list of criteria to satisfy and a type to create from the container if all the criteria are met. Now the execution of filters is disconnected from the attributes on the controller class itself. Your controller definitions now shrink and your code is much cleaner.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3&gt;The Registry and Criteria&lt;/h3&gt;

  &lt;p&gt;The registry itself is quite simple: for each Add call, make a record storing the criteria and type. When asked for the filters, pass the context to each record and if it passes, add it to all the filter lists that it implements. The record simply checks each criteria and returns true if the list is empty or if they all pass. The real magic is in the criteria.&lt;/p&gt;

  &lt;p&gt;We define two criteria for our use. The DataFormatCriteria matches requests that have a dataFormat field in their RouteData that is equal to the value passed at constructor time. We use this criteria to perform custom work for the RSS and ATOM feeds as well as JSON data. In fact, in the RSS and ATOM cases, the filters that run replace the result of the action method with a special FeedResult. Since those filters only run when the user requests one of those data formats, those filters don’t need to do any tests of state; if they’re running, that means they should replace the result.&lt;/p&gt;

  &lt;p&gt;The second criteria is the ControllerActionCriteria. This criteria is used to match a specific method on a controller. Open up OxiteApplication.cs in the root of Oxite.MVC and scroll to the registerActionFilters method to see it in action. We take an Expression&amp;lt;Func&amp;lt;T,object&amp;gt;&amp;gt; where T is the controller type. We parse this expression to determine which method on the controller you’re referring to. You can provide multiple methods to match and the criteria will return true is any one of them matches. We mostly use this criteria for our filters that add model objects that are used by our sidebar elements. This data is usually semi-related to the main controller action but isn’t directly involved with the main action of the controller. A good example is our archive sidebar.&lt;/p&gt;

  &lt;p&gt;We’re still working on how to expose the registry to addon authors but once we do, you can define any sort of criteria you like for your custom filters. You can even reuse our criteria if you like. The only real draw back I see is that there’s currently no way to remove filters or replace filters with your own code. Depending on the need, this is something we can take a look at as we iterate on the addon system.&lt;/p&gt;

  &lt;h3&gt;Subcontrollers?&lt;/h3&gt;

  &lt;p&gt;The core code uses filters for a variety of uses. We add things to the model object for the views to use(SiteInfoActionFilter, LocalizationActionFilter), control authorization (AuthorizationFilter), and even set parameters for the controller method (UserActionFilter, PageSizeActionFilter). IActionFilters can make quite a few changes to both the input and the output of the controller method. In fact, you can cover a lot of what people have been wanting to do with subcontrollers just through creative use of filters.&lt;/p&gt;

  &lt;p&gt;Now I’m not saying that you can cover everything or that this is the best way to introduce a subcontroller concept but it is a way to introduce more composition based behavior into your system. It can get complicated fast but I think it’s at a good level for us.&lt;/p&gt;

  &lt;h3&gt;Now and the Future&lt;/h3&gt;

  &lt;p&gt;If you like the way we decoupled filters from the controller attributes, steal it for your app. The big piece you need is the OxiteActionInvoker’s override of GetFilters and OxiteControllerFactory’s line where it sets the ActionInvoker property of the newly created controller to OxiteActionInvoker obtained via DI. You can take the registry too if you like. For that you’ll need ActionFilterRegistry, ActionFilterRecord, and IActionFilterCriteria. You can bring along IActionFilterRegistry if you want a more abstract way to use the registry.&lt;/p&gt;

  &lt;p&gt;As far as interacting with Oxite, we’re going to expose the registry to addons once we have a clear plugin story. Hopefully by then I will have switched it over to the fluent interface it had when I first designed it on my whiteboard. Here’s a sample of that:&lt;/p&gt;

  &lt;pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;IActionFilterRegistry registry = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; ActionFilterRegistry();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;registry.For&amp;lt;PostController&amp;gt;(p =&amp;gt; p.Item())
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;        .AndFor&amp;lt;PostController&amp;gt;(p =&amp;gt; p.List())
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;        .WithDataFormat(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;RSS&lt;/span&gt;&amp;quot;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;        .Add&amp;lt;FooFilter&amp;gt;()
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;        .AndFor&amp;lt;PostController&amp;gt;(p =&amp;gt; p.ListByTag())
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;        .Add&amp;lt;BarFilter&amp;gt;();&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&amp;#160;&lt;/p&gt;

  &lt;p&gt;I want to make it jQuery-esque in it’s concept of specifying a set, acting, narrowing the set, then acting again. We’ll see how it shapes up but I do want it to be better than it is now. If you have any thoughts or suggestions on what it should look like, comment below and let me know.&lt;/p&gt;

  &lt;p&gt;Next time I’ll talk more about something that I don’t like about the code: Oxite Model Objects and their identity crisis.&lt;/p&gt;&lt;/blockquote&gt;
    </content>
  </entry>
  <entry>
    <title type="html">The Oxite Architecture: Good, Bad, and Meh Part 1</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-1"/>
    <id>http://sampy.com/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-1</id>
    <updated>2009-02-20T17:03:34.503</updated>
    <published>2009-02-18T12:35:00</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Architecture" />
    <category term="DependencyInjection" />
    <category term="DDD" />
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;&lt;a href=&quot;/Blog/The-Oxite-Architecture-Good-Bad-and-Meh-Part-2&quot;&gt;Part 2&lt;/a&gt; now available.&lt;/p&gt;
&lt;p&gt;For those of you that have been following the trials and tribulations of the &lt;a href=&quot;http://codeplex.com/oxite&quot;&gt;Oxite Blog Engine&lt;/a&gt;, you probably know &lt;a href=&quot;http://erikporter.com/&quot;&gt;Erik&lt;/a&gt;, &lt;a href=&quot;http://duncanmackenzie.net&quot;&gt;Duncan&lt;/a&gt;, and Nathan but you may not know me.&lt;/p&gt;  &lt;p&gt;Hi, I’m Mike “Sampy” Sampson. I’m probably the closest thing to an architect we have on our team.&lt;/p&gt;  &lt;p&gt;What I want to do here and in the future is talk about the choices we made in Oxite’s new design. There are plenty of things that we did that are really cool and plenty that I don’t like and want to revisit. Oxite’s not perfect and probably never will be but I’d like to have discussion about not only why we did the things that we did but how we can do them better.&lt;/p&gt;  &lt;h3&gt;How we got here&lt;/h3&gt;  &lt;p&gt;We were working on the launch of the new &lt;a href=&quot;http://www.visitmix.com&quot;&gt;VisitMix.com&lt;/a&gt; and the MVC framework was out in preview form. The first thing almost all of us thought when looking at it was “awesome, total control over markup!” We dove in with both feet and built the new &lt;a href=&quot;http://www.visitmix.com&quot;&gt;VisitMix.com&lt;/a&gt; and deployed it. The First Great Refactor (FGR) occurred during this time and the project structure you see today was born. The Second Great Refactor (SGR) occurred after we shipped and what was once just VisitMix became Oxite. We shipped and stuff went crazy. While there was a lot of positive press, there were plenty of valid architectural complaints about the way things work. On New Year’s Eve, The Third Great Refactor (TGR) began.&lt;/p&gt;  &lt;h3&gt;A quick aside - Our philosophy&lt;/h3&gt;  &lt;p&gt;I’m a TDD guy at heart. I write my tests first and keep the code as simple as possible. The rest of my team isn’t like that and I’m okay with that. I bet you can probably figure out which features I coded in this latest release based on their test coverage. I’m working on becoming a DDD guy but I’m not there yet and I wasn’t when we designed the new Oxite. I’ve got plenty of patterns under my belt and I love reading lots of blogs and books about the subject but I’m not perfect. I got us on SCRUM a few years back and I’m still the ScrumMaster to this day.&lt;/p&gt;  &lt;p&gt;I’m not telling you this to get you to hate on Erik, Duncan, or Nathan but rather to make sure you know that going in and keep your expectations realistic. We’re a team of people who approach things differently and that has an impact on how we code. I think we write better code because of it. We always strive to find a balance between getting things done fast and getting them done well and we’re always learning better ways to do that.&lt;/p&gt;  &lt;h3&gt;Dependency Injection – The Good and The Bad&lt;/h3&gt;  &lt;p&gt;One of the first big things I did was introduce the &lt;a href=&quot;http://www.codeplex.com/unity&quot;&gt;Unity&lt;/a&gt; to the code. This ended up being pretty easy as I was doing a pretty lame imitation of DI in the code previously. Before I would define a constructor that took all the dependencies and another that was parameterless that would pass in all the concrete types. This was pretty simple in the &lt;a href=&quot;http://www.visitmix.com&quot;&gt;VisitMix.com&lt;/a&gt; days but got more complicated with the provider model added in the FGR and the SGR. To add Unity, I did what a lot of the samples you see out there for MVC did: I defined a custom ControllerFactory and replaced the default on in the App_Start event. After that I just deleted the default constructors and added all those types to the container via config and DI was up and running.&lt;/p&gt;  &lt;p&gt;The container setup has become a bit more complicated since then but rather than walk you thru all the steps of how it evolved (which I’d be happy to later if there’s interest), here’s how it works now and why we do what we do. For those following along in the code, open up ContainerFactory.cs in the Oxite.MVC project root.&lt;/p&gt;  &lt;p&gt;GetOxiteContainer() sets up our default container for use both in the web site as well as WCF. Like most bootstrapper classes, it registers a list of known types with the container. We put a few statics in there like RouteTable.Routes and HostingEnvironment.VirtualPathProvider so that we can easily replace them in test scenarios. The first funky thing you’ll notice is that we register all the connection strings from the web.config file as strings with names. We do this so that you can specify a connection string by name in the config file when you pass it to the OxiteDataContext rather than having to have the connection string in two places in your web.config.&lt;/p&gt;  &lt;p&gt;The other funky thing we do is use a child container. We load a container with all our default items then create a child container and register the values from web.config into it. This allows a crude form of plugins where you register your own implementation of one of these interfaces and we pick it up. This isn’t our long-term plan for plugins but it does get you in the door for right now.&lt;/p&gt;  &lt;p&gt;Finally, we register the container with itself for classes that need to create object dynamically (ControllerFactory being the best example). I’m not a fan of static service locators. I prefer to have a single bootstrapping point and then navigate the object graph rather than anyone snagging the locator and grabbing objects. This way classes that need the container to create objects must be explicit in their request for the container and said container can be more easily replaced in test scenarios.&lt;/p&gt;  &lt;p&gt;I like what DI has done for our code. It’s nice not to have to worry about how an object gets it’s dependencies and I think it speeds up the creation and editing of new classes. The way we register connection strings and other static objects like the current Site still feel a bit off but I don’t see a clear way to fix them at the moment. I also don’t like the amount of registration that I have to do in the ContainerFactory that seems automatable. I’ve toyed with the idea of writing some simple auto-discovery rules for Unity that map IPostService to PostService and the like but that seems like a lot of tricky code for something that simply reduces configuration. I’d love to hear your thoughts on how we use DI and ways we can improve.&lt;/p&gt;  &lt;h3&gt;More to follow&lt;/h3&gt;  &lt;p&gt;In the interest of getting things started, I’ll stop here for now. Next up I plan to talk about the way we used Action Filters like peer controllers while at the same time providing a way to use them with out attributing your controller methods.&lt;/p&gt;  &lt;p&gt;Until then!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">WCF Works!</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/WCF-Works"/>
    <id>http://sampy.com/Blog/WCF-Works</id>
    <updated>2009-02-13T19:53:56.473</updated>
    <published>2009-02-13T13:53:56.473</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Yay!&lt;/p&gt;  &lt;p&gt;I can post from Live Writer now!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Another morning, another update!</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/Another-morning-another-update"/>
    <id>http://sampy.com/Blog/Another-morning-another-update</id>
    <updated>2009-02-11T19:06:53.837</updated>
    <published>2009-02-11T11:06:45</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      This post should show up properly in the archive list!
    </content>
  </entry>
  <entry>
    <title type="html">Updated with the latest code</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/Updated-with-the-latest-code"/>
    <id>http://sampy.com/Blog/Updated-with-the-latest-code</id>
    <updated>2009-02-11T19:00:07.993</updated>
    <published>2009-02-10T15:07:00</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      I can't seem to get the archive list to show up in the sidebar so that's what I'm investigating now.&lt;br/&gt;
EDIT: Turns out it had to do with setting the State on entries created with the web interface. Live Writer was doing it right though.
    </content>
  </entry>
  <entry>
    <title type="html">Practicing what I code</title>
    <link rel="alternate" type="text/html" href="http://sampy.com/Blog/Practicing-what-I-code"/>
    <id>http://sampy.com/Blog/Practicing-what-I-code</id>
    <updated>2009-02-07T00:11:12.85</updated>
    <published>2009-02-06T16:11:08</published>
    <author>
      <name>sampy</name>
    </author>
    <category term="Oxite" />
    <content type="html" xml:lang="en">
      Now that we're getting close to our next release, I figured that I would move over to the new hotness.

Expect more to follow.
    </content>
  </entry>
</feed>
