Factory using Structuremap to inject concrete implementation of BaseTask
I believe it is not good to pass builder to constructor as an argument. I recommend to read Constructor Design guidelines from Microsoft. If you have any non-simple calculation in constructor it will be better to move it to a static method. In your case I would firstly create model and then pass the built one to the constructor. Unfortunately I don't see where and how a builder is created so maybe your solution keeps a good balance between complexity, flexibility and beauty.

It seems that here


public TModel Model {  get; set;}



you don't need setter since Model is set via constructor and is not supposed to be changed.

Small note: don't use extra spaces in generics :) IModelBuilder &lt; DateModel &gt; will look better as IModelBuilder&lt;DateModel&gt;.