This is the part 3 of 5 of my implementing of a MVC Browser history
MVC browser history – idea
Browser history –2 – implementing, small bugs
Browser history 3–trying to Nuget – modifications in order to can be transformed from an application to a component
Browser history 4–NuGet again – finally Nuget deployment
Browser history–part 5–conclusions – conclusions
TL;DR : Trying to add a feature (NuGET ) will conduce you to other features – apparently easy to implement – but took 2 hours…
Content:
First, source control is more important – http://www.joelonsoftware.com/articles/fog0000000043.html .I choose github – deploy is a breeze with GitHub for windows . More, appharbor integration with github is awesome – you can see the application live at http://browserhistory.apphb.com/ .
Now , for generating Nuget package, I should be moving the classes on their own assembly / dll. Also , added this blog to the info. Ensure it works the same. Uploaded to GitHub
And appharbor just deployed
Now, it will be good if I let user switch implementation between memory saving and database saving… in order to developers( that have installed the dll with NuGet ) switch easily to their database.
Created
BrowserUserHistoryRepositorySqlServer
and , after some implementing of IBrowserUserHistoryRepository , the method
public IBrowserUserHistoryRepository FilterByUser(string UserName)
put some problems – but solved with a private variable.
Now must decide the best way to switch between MemoryRepository and SqlServerRepository in
public static T AddOrRetrieveFromApplication<T>(HttpApplicationStateBase app)
where T:new()
First, we must retrieve at runtime the instance of the interface – so structuremap to the rescure.
Second, if we need to retrieve a class – must have at least a default constructor.
So the constraint of the T was gone away – and the code is
T result;
if (typeof(T).IsInterface) {
result =(T) ObjectFactory.GetInstance(type) ;
}
else
{
result = (T)Activator.CreateInstance(type);
}
Also, in global.asax the following lines were added:
//ObjectFactory.Configure(ce => ce.For<IBrowserUserHistoryRepository>().Use<BrowserUserHistoryRepositoryMemory>()); //uncomment those for sql server ce ObjectFactory.Configure(ce => ce.For<IBrowserUserHistoryRepository>().Use<BrowserUserHistoryRepositorySqlServer>());
Now, when deploy , AppHarbor will NOT found EntityFramework dll.
Added HintPath to csproj to find EF
<HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
as seen at
http://blog.appharbor.com/2012/04/24/automatic-migrations-with-entity-framework-4-3
and it works!
More, it works with sql server AppHarbor addon and transformation of web.config.
It took 2 hours to do this thing, apparently simple.
Now you can find the code source on github at https://github.com/ignatandrei/MVCbrowserHistory
You can browse the application at http://browserhistory.apphb.com/
Next time: (maybe some tests and ) NuGET!