Move to Autofac

I left Ninject… Poor guy… Ninject was my favorite dependency container injector, but there is a new hype. The new hype is called ‘Autofac’.

The main reason for the switch was the support of UWP (Universal Windows Platform) and .Net Core. Ninject is still in Beta while Autofac is used also by Microsoft themselves.

So, time to do a switch. The following caveats were found:



Instead of doing a bind to something, you register something as an interface/method.


By default, Autofac does not support the creation of an unregistered, concrete class like Ninject does.

Here, you need to add the following line:


I need the creation of unregistered class, because the DatenMeister uses a plugin-like architecture where the plugins are created by the dependency injection.

In a future version, this class will be replaced by a more specific registration


Autofac differs between the builder, the container and the lifetime scope. In Ninject, this was more or less voluntary. This leads to some architectural changes, since some of the methods used the global builder which is not available after everything has been built. Not nice, but acceptable.


After having built the container, the builder cannot be changed anymore. A new builder has to be created. This also leads to some architectural changes.


In the end… a lot of refactoring without improving the product…

Invoking MsBuild from Powershell

Unfortunately the command ‘msbuild’ is not in the default command line path. This means, that you cannot invoke ‘msbuild’ by just calling ‘msbuild’. You need to find the directory of the .Net-Tools via the registry and use an absolute path.

You could also call your script from the Developer Command Line, but my feeling is that this command line never works as intended.

Another solution is to use a script which does all the look for you:

Invoke-MsBuild does all the dirty work for you.

One example about its usage can be found in my Nuget-Package-Packer packaging NuGet-Package for the NuGet-Package-Repository.

It just works (minor improvements ongoing).

DatenMeister.dll auf Nuget

After a long time of doing nothing, I finally published the DatenMeister.dll in Nuget.

This C# library contains a small interface of the MOF specification as defined by the OMG object group.


It also include a very simple in-memory interface, which is capable to work on the MOF-instances.

In combination with other libraries, it is planned to create a library, which shows somehow a conformance to the MOF and UML specifications.

Of course, the complete library is available within GitHub. (

The server

Server was ordered and is assembled and running fine:


Due to space constraints, I decided to try out a barebone, where memory, power supply and housing is already included.


The following components are included,. Since I’m totally non-aware of the current hardware specifications and technology, there was more wikipedia involved than real knowledge. Hard to keep up… also in hardware.


So, in total: a Skylake4 GB RAM, 12 TB HDD, 256 GB SSD for the operating system and a small CPU. Should be sufficient as a storage device.

Surprisingly, the assembly of CPUs, HDDs, SDDs (m.2) just lasted about 15 minutes. I expected at least one or two hours. The only guessing I had was the direction of the m.2 interface. It looks symmetric, there is not cut-in and there is no symbol about the upward side… I browsed through the internet and it was called ‘double-sided M.2’. I just tried out side with the logo upwards and hoped… It worked.

It is intended to run the HDDs as a 6 TB mirrored RAID-1 which allows the loss of one of the HDDs without losing any data.

The OS


I did not want to waste 90 EUR for a Windows licence and I wanted to improve my Linux knowledge, so the decision was very clear for me:

The OS will be a Gentoo Linux and probably one or two Ubuntu instances with kvm or another virtualization technology. Why Gentoo? Because I always used Gentoo. There is really no reasoning except having the feeling of total control…

The OS itself was installed after 1 hour. Another half an hour was needed to find out that the intel driver “e1000e” instead of “e1000” is necessary for the latest mainboard revisions. Minor issue, a little bit annoying.

Null Conditional Operator

A really cool feature in the latest version C# is the “?.”-operator.

What does it do? It checks whether the left side of the operator is null or not. If it is null, the operation will be evaluated as null, otherwise the “.”-operator will be used. A lot of null-comparison can be stripped out of source code.


return (x as IElement)?.metaclass?.Equals(UmlClasses[„g“]);

would be written in old format as:

var y = x as IElement;
if (y == null) { return null; }
var m = y.metaclass;
if (m == null) { return null; }
return m.Equals(UmlClassed[“Generalization”]);

Now availale as a single line. In combination with the “??”-operator even more powerful.

return (x as IElement)?.metaclass?.Equals(UmlClasses[„g“]) ?? true;

Gibt true statt null zurück, wenn einer der Ausdrücke als null gewertet werden.


The rat came in

After thinking about getting a new homeserver for a long, long time, I finally decided to buy the components to assemble a new homeserver.


The homeserver will be called “Ratte” as it is also living in the basement. All my PCs are called like animals:

  • Alligator: Old one… obsolete
  • Bueffel: My first laptop… also called “Aschenbecher” (Ash tray) as it was called as dirty as an ash tray, still working, but not used (more than 12 years old)
  • Chameleon: My first smartphone
  • Dingo: Another smartphone
  • Esel: Still living, my primary workstation (desktop)
  • Fuchs: Dead
  • Habicht: Dead… was my primary laptop… An Acer ultrabook, did not boot up one morning
  • Hamster: My NAS, hosting a lot of data
  • Henne
  • Iltis: My Surface 2
  • and now Rat: My basement server… will take over the task from Hamster

What are the requirements for “The Ratte”?

  • A lot of storage
  • Some computing power
  • Being able to host content being reachable via the internet
  • Media server

So I decided for a full PC instead of having a small foot-print raspberry pi not being able to do computing intensive work.