<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Dotnet on Chris McKelt - Remembering Thoughts</title><link>https://blog.smarttechventures.au/tags/dotnet/</link><description>Recent content in Dotnet on Chris McKelt - Remembering Thoughts</description><generator>Hugo -- 0.147.2</generator><language>en</language><lastBuildDate>Wed, 08 Aug 2018 00:00:00 +0800</lastBuildDate><atom:link href="https://blog.smarttechventures.au/tags/dotnet/index.xml" rel="self" type="application/rss+xml"/><item><title>Perth .Net user group talk</title><link>https://blog.smarttechventures.au/articles/posts/perth-net-user-group-talk/</link><pubDate>Wed, 08 Aug 2018 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/perth-net-user-group-talk/</guid><description>&lt;h1 id="predicting-bs-using-mlnet">Predicting BS using ML.Net&lt;/h1>
&lt;p>Machine learning is typically the realm for R/Python. But can .Net move into this space?&lt;/p>
&lt;p>In this talk we will run through Microsoft&amp;rsquo;s new ML.Net framework including what it currently offers, how to build a learning pipeline and how to deploy a model to an Azure Service.&lt;/p>
&lt;p>&lt;img alt="image" loading="lazy" src="https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//2018/08/image-7.png">&lt;/p>
&lt;p>&lt;a href="https://slides.com/chrismckelt/deck-451cdb94-a37d-47b7-9d49-6686065e7d03" title="https://slides.com/chrismckelt/deck-451cdb94-a37d-47b7-9d49-6686065e7d03" target="_blank">https://slides.com/chrismckelt/deck-451cdb94-a37d-47b7-9d49-6686065e7d03&lt;/a>&lt;/p>
&lt;iframe width="576" height="420" src="//slides.com/chrismckelt/deck-451cdb94-a37d-47b7-9d49-6686065e7d03/embed?style=dark&amp;amp;byline=hidden&amp;amp;share=hidden" frameborder="0" scrolling="no" allowfullscreen mozallowfullscreen="" webkitallowfullscreen="">&lt;/iframe></description></item><item><title>Charge Id – The prediction model</title><link>https://blog.smarttechventures.au/articles/posts/charge-id-building-the-prediction-models-part-5/</link><pubDate>Sun, 29 Jul 2018 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/charge-id-building-the-prediction-models-part-5/</guid><description>&lt;p>In this post we will build a prediction model using ML .Net to classify an individual bank transaction into a pre-defined group using the description text.&lt;/p>
&lt;p>We will then evaluate the effectiveness of the model using standard evaluation &lt;a href="https://docs.microsoft.com/en-us/dotnet/machine-learning/resources/glossary" target="_blank">metrics&lt;/a>.&lt;/p>
&lt;p>The steps involved to create a model using ML.Net are:&lt;/p>
&lt;ol>
&lt;li>Decide what type of machine learning problem we are trying to solve?&lt;/li>
&lt;li>Retrieve and clean the data   (CSV/TSV used with ML.Net for no)&lt;/li>
&lt;li>Create a prediction service API&lt;/li>
&lt;li>Create a ‘Learning Pipeline’ to iterate over the model build process
&lt;ul>
&lt;li>Training&lt;/li>
&lt;li>Testing&lt;/li>
&lt;li>Evaluating result metrics&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Exploring the output model file&lt;/li>
&lt;/ol>
&lt;p> &lt;/p></description></item><item><title>Charge Id – Analysing the data</title><link>https://blog.smarttechventures.au/articles/posts/charge-id-analysing-the-data-part-4/</link><pubDate>Sat, 21 Jul 2018 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/charge-id-analysing-the-data-part-4/</guid><description>&lt;h2 id="so-what-are-we-trying-to-do-here">So what are we trying to do here?&lt;/h2>
&lt;h3 id="hypothesis">Hypothesis&lt;/h3>
&lt;p>Given a users bank statement we will be able to predict (within a statistical confidence level ) the transactions within a period into &lt;a href="https://github.com/chrismckelt/vita/blob/master/source/Vita.Contracts/SubCategories/Categories.cs" target="_blank">categories &amp;amp; sub categories&lt;/a> for spending classification.&lt;/p>
&lt;h3 id="target-categories">Target Categories&lt;/h3>
&lt;ul>
&lt;li>Banking &amp;amp; Finance&lt;/li>
&lt;li>Entertainment&lt;/li>
&lt;li>Food &amp;amp; Drinks&lt;/li>
&lt;li>Groceries&lt;/li>
&lt;li>Health &amp;amp; Beauty&lt;/li>
&lt;li>Holiday &amp;amp; Travel&lt;/li>
&lt;li>Home&lt;/li>
&lt;li>Household Utilities&lt;/li>
&lt;li>Income&lt;/li>
&lt;li>Insurance&lt;/li>
&lt;li>Kids&lt;/li>
&lt;li>Miscellaneous&lt;/li>
&lt;li>Shopping&lt;/li>
&lt;li>Transferring Money&lt;/li>
&lt;li>Transport&lt;/li>
&lt;li>Work &amp;amp; Study&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://github.com/chrismckelt/vita/blob/master/source/Vita.Contracts/SubCategories/Categories.cs" target="_blank">Sub categories available on this link&lt;/a>&lt;/p></description></item><item><title>Charge Id – solution overview</title><link>https://blog.smarttechventures.au/articles/posts/charge-id-solution-overview-part-3/</link><pubDate>Sun, 15 Jul 2018 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/charge-id-solution-overview-part-3/</guid><description>&lt;p>The proposed solution sequence flow follows:&lt;/p>
&lt;h3 id="heading"> &lt;img loading="lazy" src="https://www.websequencediagrams.com/cgi-bin/cdraw?lz=dGl0bGUgQ2hhcmdlSWQgT3ZlcnZpZXcKClVzZXItPiBXZWIgQVBJIDogdGV4dCBpZGVudGlmaWNhdGlvbiByZXF1ZXN0Cm5vdGUgbGVmdCBvZgArCDogIGF1dGhlbnQAJwcKAEQILT4gQ29zbW9zIERCOiBsb29rdXAgY2xhc3NpZmllZCBjAIEJBXMgCgAdCSAtPiBVc2VyIDogZm91bmQgbWF0Y2gAFgotPiBDADoGeSBwaXBlbGluZSA6IG5vdAAqBgoADREtPiBQcmVkaWMAgUMFAIFcBnAACwYKAAoPLQCBJAwAHQplZCAAgWoOAHEROiAgYWRkIHRvIEF6dXJlIGVsYXN0aWMgc2VhcmNoIGNsdXN0ZXIAgUUhAIEZDyAAgwkNbm8AggUHAIJ-BXJpZ2gAgnUPc2VuAH4FcXVldWUgZm9yIG1hbnVhbCBwcm9jZXNzaW5nAIIKFACBOhNyZS10cmFpbiBtb2RlbAoK&amp;s=napkin">&lt;/h3>
&lt;hr>
&lt;h2 id="posts-in-this-series">Posts in this series&lt;/h2>
&lt;p>Charge Id – scratching the tech itch &lt;br>
Charge Id – lean canvas&lt;br>
Charge Id – solution overview&lt;br>
Charge Id – analysing the data&lt;br>
Charge Id – the prediction model&lt;br>
Charge Id – deploying a ML.Net Model to Azure&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;p>&lt;a href="https://github.com/chrismckelt/vita" title="https://github.com/chrismckelt/vita" target="_blank">https://github.com/chrismckelt/vita&lt;/a>&lt;/p></description></item><item><title>Charge Id - Lean Canvas</title><link>https://blog.smarttechventures.au/articles/posts/charge-id-lean-canvas-part-2/</link><pubDate>Fri, 13 Jul 2018 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/charge-id-lean-canvas-part-2/</guid><description>&lt;h1 id="lean-canvas">Lean Canvas&lt;/h1>
&lt;h2 id="problem">Problem&lt;/h2>
&lt;p>This is the start of a series of blog posts where I try to build an online personal budgeting system.&lt;/p>
&lt;p>The motivation for this was me trying to do a household budget usin&lt;/p>
&lt;p>With &lt;a href="https://en.wikipedia.org/wiki/Open_banking" target="_blank">Open Banking&lt;/a> approaching a common service to classify income and expenditure for bank statement transactions is not currently available on the market.&lt;/p>
&lt;p>The ability for a consumer to categorise their transactions sits within varied personal finance providers (eg. pocketbook, mint).&lt;/p></description></item><item><title>Charge Id – What is the problem?</title><link>https://blog.smarttechventures.au/articles/posts/open-startup-scratching-the-itch-to-solve-my-own-problem-through-tech/</link><pubDate>Fri, 06 Jul 2018 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/open-startup-scratching-the-itch-to-solve-my-own-problem-through-tech/</guid><description>&lt;p>This is the start of a series of blog posts where I try to build an online personal budgeting system.&lt;/p>
&lt;p>The motivation for this was me trying to do a household budget using existing tools (Pocketbook, CashDesk, QuickBooks, Xero).&lt;/p>
&lt;p>Each time I needed to classify a large number of transactions manually (except Pocketbook they have got a pretty good classification engine)&lt;/p>
&lt;p>As I do lots of transfer between accounts the summaries never made sense.  So I thought Id give it a go to build my own personal finance budgeter.&lt;/p></description></item><item><title>Map .html extension to the .Net razor view engine</title><link>https://blog.smarttechventures.au/articles/posts/map-html-extension-to-the-net-razor-view-engine/</link><pubDate>Thu, 10 Sep 2015 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/map-html-extension-to-the-net-razor-view-engine/</guid><description>&lt;p>1. Add the &lt;em>buildProvider&lt;/em> config for razor inside the compilation element&lt;/p>
&lt;p>&lt;a href="https://blog.smarttechventures.au/https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//2015/09/image2.png">&lt;img alt="image" loading="lazy" src="https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//image_thumb2.png" title="image">&lt;/a>&lt;/p>
&lt;p>2. Application start –&amp;gt; Registers the html extension with razor&lt;/p>
&lt;p>&lt;a href="https://blog.smarttechventures.au/https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//2015/09/image1.png">&lt;img alt="image" loading="lazy" src="https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//image_thumb1.png" title="image">&lt;/a>&lt;/p>
&lt;p>3. Create a Start.cshtml page and ingest the index.html page&lt;/p>
&lt;p>&lt;a href="https://blog.smarttechventures.au/https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//2015/09/image3.png">&lt;img alt="image" loading="lazy" src="https://raw.githubusercontent.com/chrismckelt/chrismckelt.github.io/master/_posts/posts/images//image_thumb3.png" title="image">&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>&amp;lt;compilation debug\=&amp;#34;true&amp;#34; targetFramework\=&amp;#34;4.6&amp;#34; \&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;buildProviders\&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;add extension\=&amp;#34;.html&amp;#34; type\=&amp;#34;System.Web.WebPages.Razor.RazorBuildProvider&amp;#34;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/buildProviders\&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/compilation\&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System.Web.Razor.RazorCodeLanguage.Languages.Add(&amp;#34;html&amp;#34;, new CSharpRazorCodeLanguage()); WebPageHttpHandler.RegisterExtension(&amp;#34;html&amp;#34;);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Layout \= null;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> @RenderPage(&amp;#34;~/index.html&amp;#34;)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;!-- Version + @System.Reflection.Assembly.GetAssembly(typeof (Startup)).GetName().Version.ToString(); \--&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Web API Test to ensure public routes do not change</title><link>https://blog.smarttechventures.au/articles/posts/web-api-test-to-ensure-public-routes-do-not-change-3-2-2-2/</link><pubDate>Mon, 19 May 2014 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/web-api-test-to-ensure-public-routes-do-not-change-3-2-2-2/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>[TestFixture]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>public &lt;span style="color:#00a">class&lt;/span> RouteTestFixture {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [Test]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public void Routes _should _not _change() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">const&lt;/span> string good = &lt;span style="color:#f00;background-color:#faa">@&lt;/span> &lt;span style="color:#a50">&amp;#34;all existing routes go here (hint run the test first then copy output to here)&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> goodRoutes = good.Split(Convert.ToChar(&lt;span style="color:#a50">&amp;#34;;&amp;#34;&lt;/span>));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> notFound = new List &amp;lt; string &amp;gt; ();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> ass = Assembly.GetAssembly(&lt;span style="color:#0aa">typeof&lt;/span> (EventStatisticsController));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> sb = new StringBuilder();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> foreach(&lt;span style="color:#00a">var&lt;/span> type &lt;span style="color:#00a">in&lt;/span> ass.GetTypes()) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> try {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> members = type.GetMembers();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">for&lt;/span> (int i = &lt;span style="color:#099">0&lt;/span>; i &amp;lt; members.Length; i++) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (members[i].IsDefined(&lt;span style="color:#0aa">typeof&lt;/span> (RouteAttribute), &lt;span style="color:#0aa">false&lt;/span>)) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Object[] atts = members[i].GetCustomAttributes(&lt;span style="color:#0aa">typeof&lt;/span> (RouteAttribute), &lt;span style="color:#0aa">false&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">for&lt;/span> (int j = &lt;span style="color:#099">0&lt;/span>; j &amp;lt; atts.Length; j++) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> routeAttribute = (RouteAttribute) atts[j];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> string route = routeAttribute.Template + &lt;span style="color:#f00;background-color:#faa">@&lt;/span> &lt;span style="color:#a50">&amp;#34;/&amp;#34;&lt;/span> + routeAttribute.Name;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(route);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sb.Append(route + &lt;span style="color:#a50">&amp;#34;;&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (!goodRoutes.Contains(route)) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> notFound.Add(route);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> } catch (Exception e) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(&lt;span style="color:#f00;background-color:#faa">@&lt;/span> &lt;span style="color:#a50">&amp;#34;An exception occurred: {0}&amp;#34;&lt;/span>, e.Message);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (notFound.Any()) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(&lt;span style="color:#f00;background-color:#faa">@&lt;/span> &lt;span style="color:#a50">&amp;#34;-- MISSING ROUTES --&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> foreach(&lt;span style="color:#00a">var&lt;/span> nf &lt;span style="color:#00a">in&lt;/span> notFound) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(nf);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Assert.Fail(&lt;span style="color:#a50">&amp;#34;Missing Routes: &amp;#34;&lt;/span> + notFound.Count);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> } &lt;span style="color:#00a">else&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Assert.True(&lt;span style="color:#0aa">true&lt;/span>, &lt;span style="color:#a50">&amp;#34;All routes matched&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(&lt;span style="color:#f00;background-color:#faa">@&lt;/span> &lt;span style="color:#a50">&amp;#34;------------------------------------------------&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(&lt;span style="color:#f00;background-color:#faa">@&lt;/span> &lt;span style="color:#a50">&amp;#34;Match the following string for future tests&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(sb.ToString());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Custom NHibernate User Type</title><link>https://blog.smarttechventures.au/articles/posts/custom-nhibernate-user-type-2/</link><pubDate>Thu, 26 Aug 2010 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/custom-nhibernate-user-type-2/</guid><description>&lt;h1 id="how-to-use-a-custom-nhibernate-user-type">How to use a custom NHibernate User Type&lt;/h1>
&lt;p>To store the state of a Risk (ie RiskState) as a value in a column we can use a NHibernate.UserType&lt;/p>
&lt;p>The RiskState can be one of the following: (these are all derived from RiskState which implements IRiskState)&lt;/p>
&lt;p>Our user type&lt;/p>
&lt;pre>&lt;code> public class RiskStateNameUserType: IUserType {
#region IUserType Members
public object Assemble(object cached, object owner)
{
return cached;
}
public object DeepCopy(object value)
{
return value;
}
public object Disassemble(object value)
{
return value;
}
public int GetHashCode(object x)
{
return x.GetHashCode();
}
public bool IsMutable
{
get {
return false;
}
}
public object NullSafeGet(System.Data.IDataReader dr, string\[\] names, object owner)
{
var property0 = NHibernateUtil.String.NullSafeGet(dr, names\[0\]);
if (property0 == null)
{
return null;
}
IRiskState state;
if (owner is Risk)
{
state =
(IRiskState)
Activator.CreateInstance(Type.GetType(typeof (IRiskState).Namespace + &amp;quot;.&amp;quot; + (string) property0),
owner);
} else
{
state =
(IRiskState)
Activator.CreateInstance(Type.GetType(typeof (IRiskState).Namespace + &amp;quot;.&amp;quot; + (string) property0));
}
return state;
}
public void NullSafeSet(System.Data.IDbCommand cmd, object value, int index)
{
if (value == null)
{
((IDataParameter) cmd.Parameters\[index\]).Value = DBNull.Value;
} else
{
var state = (IRiskState) value;
((IDataParameter) cmd.Parameters\[index\]).Value = state.GetType().Name;
}
}
public object Replace(object original, object target, object owner)
{
return original;
}
public Type ReturnedType
{
get {
return typeof (RiskState);
}
}
public NHibernate.SqlTypes.SqlType\[\] SqlTypes
{
get {
return new\ [\] {
NHibernateUtil.String.SqlType
};
}
}
public new bool Equals(object x, object y)
{
if (x == null &amp;amp;&amp;amp; y == null) return true;
if (x == null || y == null) return false;
return x.GetType() == y.GetType();
}
#endregion
}
&lt;/code>&lt;/pre>
&lt;p>Using this on a property as follows:&lt;/p></description></item><item><title>WPF UI Thread Dispatcher</title><link>https://blog.smarttechventures.au/articles/posts/wpf-ui-thread-dispatcher/</link><pubDate>Wed, 26 May 2010 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/wpf-ui-thread-dispatcher/</guid><description>&lt;h2 id="a-simple-implemention-for-calling-asych-methods-from-the-ui">A simple implemention for calling asych methods from the UI&lt;/h2>
&lt;h4 id="examples">Examples&lt;/h4>
&lt;blockquote>
&lt;pre>&lt;code> dispatcher.ExecuteOnMainUIThread(CommandManager.InvalidateRequerySuggested);
dispatcher.Execute(() =&amp;gt;
{
SomeLongRunningMethodHere();
});
&lt;/code>&lt;/pre>&lt;/blockquote>
&lt;h2 id="the-interface">The interface&lt;/h2>
&lt;blockquote>
&lt;p>public interface IDispatcher
{
void Execute(Action action);
void ExecuteOnMainUIThread(Action action);
}
}&lt;/p>&lt;/blockquote>
&lt;h2 id="synchronous-for-use-in-testing">Synchronous for use in Testing&lt;/h2>
&lt;blockquote>
&lt;pre>&lt;code> public class SynchronousDispatcher: IDispatcher {
public void Execute(Action action) {
action();
}
public void ExecuteOnMainUIThread(Action action) {
action();
}
&lt;/code>&lt;/pre>
&lt;p>}&lt;/p>&lt;/blockquote>
&lt;h2 id="asynchronous-for-use-by-the-application-at-run-time">Asynchronous for use by the application at run time&lt;/h2>
&lt;blockquote>
&lt;pre>&lt;code>public class AsynchronousDispatcher: IDispatcher {
public void Execute(Action action) {
action.BeginInvoke(CallBack, action);
}
public void ExecuteOnMainUIThread(Action action) {
Dispatcher dispatcher;
if (Application.Current != null) {
dispatcher = Application.Current.Dispatcher;
} else {
dispatcher = Dispatcher.CurrentDispatcher;
}
dispatcher.Invoke(action);
}
private void CallBack(IAsyncResult result) {
try {
((Action) result.AsyncState).EndInvoke(result);
} catch (Exception ex) { // Need to raise the exception on the main thread ExecuteOnMainUIThread(() =&amp;gt; { throw ex; } ); } finally { result.AsyncWaitHandle.Close(); }
}
}
&lt;/code>&lt;/pre>&lt;/blockquote></description></item><item><title>Stream bytes to files</title><link>https://blog.smarttechventures.au/articles/posts/stream-bytes-to-files/</link><pubDate>Wed, 10 Feb 2010 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/stream-bytes-to-files/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>using(&lt;span style="color:#00a">var&lt;/span> stream =
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Assembly.GetAssembly(&lt;span style="color:#0aa">typeof&lt;/span> (StubPolicy)).GetManifestResourceStream(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a50">&amp;#34;Documents.TestHelpers.Files.test.msg&amp;#34;&lt;/span>)) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">const&lt;/span> int bufferLength = &lt;span style="color:#099">256&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> buffer = new Byte\[bufferLength\];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (stream != null) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> int bytesRead = stream.Read(buffer, &lt;span style="color:#099">0&lt;/span>, bufferLength);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> using(&lt;span style="color:#00a">var&lt;/span> fs = new FileStream(filename, FileMode.CreateNew, FileAccess.Write)) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> // Write out the input stream
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">while&lt;/span> (bytesRead &amp;gt; &lt;span style="color:#099">0&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fs.Write(buffer, &lt;span style="color:#099">0&lt;/span>, bytesRead);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bytesRead = stream.Read(buffer, &lt;span style="color:#099">0&lt;/span>, bufferLength);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fs.Close();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stream.Close();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Castle Windsor – WCF Endpoint Configuration</title><link>https://blog.smarttechventures.au/articles/posts/castle-windsor-wcf-endpoint-configuration/</link><pubDate>Mon, 01 Feb 2010 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/castle-windsor-wcf-endpoint-configuration/</guid><description>&lt;blockquote>
&lt;pre>&lt;code> const int maxSize = 52428800;
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
binding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Default;
binding.MaxReceivedMessageSize = 1000000;
binding.CloseTimeout = new TimeSpan(0, 1, 0);
binding.OpenTimeout = new TimeSpan(0,1,0);
binding.ReceiveTimeout = new TimeSpan(0,10,0);
binding.SendTimeout = new TimeSpan(0,1,0);
binding.AllowCookies = false;
binding.BypassProxyOnLocal = false;
binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
binding.MaxBufferSize = maxSize;
binding.MaxBufferPoolSize = maxSize;
binding.MaxReceivedMessageSize = maxSize;
binding.MessageEncoding = WSMessageEncoding.Mtom;
binding.TextEncoding = Encoding.UTF8;
binding.TransferMode = TransferMode.Buffered;
binding.UseDefaultWebProxy = true;
binding.ReaderQuotas.MaxDepth = 32;
binding.ReaderQuotas.MaxStringContentLength = maxSize;
binding.ReaderQuotas.MaxArrayLength = maxSize;
binding.ReaderQuotas.MaxBytesPerRead = maxSize;
binding.ReaderQuotas.MaxNameTableCharCount = maxSize;
container = new IocContainer(LifestyleType.Transient);
container.AddFacility&amp;lt;WcfFacility&amp;gt;().Register(
Component
.For&amp;lt;ISharePointFacadeService&amp;gt;()
.Named(&amp;quot;DmsGateway&amp;quot;)
.ActAs(
new DefaultClientModel()
{
Endpoint = WcfEndpoint
.BoundTo(binding)
.At(&amp;quot;http://localhost/SharepointFacade/DMSService.svc/mex&amp;quot;)
}));
&lt;/code>&lt;/pre>&lt;/blockquote></description></item><item><title>ConvertPropertiesAndValuesToHashtable Extension method</title><link>https://blog.smarttechventures.au/articles/posts/convertpropertiesandvaluestohashtable-extension-method/</link><pubDate>Wed, 27 Jan 2010 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/convertpropertiesandvaluestohashtable-extension-method/</guid><description>&lt;blockquote>
&lt;p>public static class Extensions
{
public static Hashtable ConvertPropertiesAndValuesToHashtable(this object obj)
{
var ht = new Hashtable();&lt;/p>
&lt;pre>&lt;code> // get all public static properties of obj type
var propertyInfos = obj.GetType().GetProperties().Where(a=&amp;gt;a.MemberType.Equals(MemberTypes.Property)).ToArray();
// sort properties by name
Array.Sort(propertyInfos, (propertyInfo1, propertyInfo2) =&amp;gt; propertyInfo1.Name.CompareTo(propertyInfo2.Name));
// write property names
foreach (PropertyInfo propertyInfo in propertyInfos)
{
ht.Add(propertyInfo.Name, propertyInfo.GetValue(obj, BindingFlags.Public, null, null, CultureInfo.CurrentCulture));
}
return ht;
}
}
&lt;/code>&lt;/pre>
&lt;p>Tests&lt;/p>
&lt;p>using System;
using System.Collections;
using System.Globalization;
using System.Linq;
using System.Reflection;&lt;/p></description></item><item><title>WCF Tracing</title><link>https://blog.smarttechventures.au/articles/posts/wcf-tracing/</link><pubDate>Fri, 13 Nov 2009 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/wcf-tracing/</guid><description>&lt;p>In the web.config in between the &lt;configuration>&lt;/configuration> tags&lt;/p>
&lt;blockquote>
&lt;p> &amp;lt;system.diagnostics&amp;gt;&lt;br>
&amp;lt;sources&amp;gt;&lt;br>
&amp;lt;source name=&amp;ldquo;System.ServiceModel&amp;rdquo;
switchValue=&amp;ldquo;Information, ActivityTracing&amp;rdquo;
propagateActivity=&amp;ldquo;true&amp;rdquo;&amp;gt;&lt;br>
&amp;lt;listeners&amp;gt;&lt;br>
&amp;lt;add name=&amp;ldquo;traceListener&amp;rdquo;
type=&amp;ldquo;System.Diagnostics.XmlWriterTraceListener&amp;rdquo;
initializeData= &amp;ldquo;WCFTrace.svclog&amp;rdquo; /&amp;gt;&lt;br>
&amp;lt;/listeners&amp;gt;&lt;br>
&amp;lt;/source&amp;gt;&lt;br>
&amp;lt;/sources&amp;gt;&lt;br>
&amp;lt;trace autoflush=&amp;ldquo;true&amp;rdquo; /&amp;gt;&lt;br>
&amp;lt;/system.diagnostics&amp;gt;&lt;/p>&lt;/blockquote></description></item><item><title>RandomHelper</title><link>https://blog.smarttechventures.au/articles/posts/randomhelper/</link><pubDate>Mon, 27 Apr 2009 00:00:00 +0800</pubDate><guid>https://blog.smarttechventures.au/articles/posts/randomhelper/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>using System;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>using System.Collections.Generic;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>using System.Linq;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>using System.Reflection;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>using System.Text;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>namespace TestHelpers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> &lt;span style="color:#00a">class&lt;/span> RandomHelper
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /* This method can be used to fill all public properties of an object with random values depending on their type. CAUTION: it does &lt;span style="color:#00a">not&lt;/span> fill attributes that end with &lt;span style="color:#a50">&amp;#39;ID&amp;#39;&lt;/span> &lt;span style="color:#00a">or&lt;/span> attributes which are called &lt;span style="color:#a50">&amp;#39;pk&amp;#39;&lt;/span>. They have to be filled manually.*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> private &lt;span style="color:#00a">static&lt;/span> readonly Random randomSeed = new Random();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /* Generates a random string with the given length*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> T FillPropertiesWithRandomValues&amp;lt;T&amp;gt;(bool fillBaseObjects)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> CreateItem&amp;lt;T&amp;gt;(&lt;span style="color:#0aa">true&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> T FillPropertiesWithRandomValues&amp;lt;T&amp;gt;()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> CreateItem&amp;lt;T&amp;gt;(&lt;span style="color:#0aa">false&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> private &lt;span style="color:#00a">static&lt;/span> T CreateItem&amp;lt;T&amp;gt;(bool fillBaseObjects)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type type = &lt;span style="color:#0aa">typeof&lt;/span> (T);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> item = (T) Activator.CreateInstance(&lt;span style="color:#0aa">typeof&lt;/span> (T));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">while&lt;/span> (type != null)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> PropertyInfo[] infos =
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (infos.Length == &lt;span style="color:#099">0&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (item.GetType().BaseType != null)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> infos =
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> item.GetType().BaseType.GetProperties(BindingFlags.Public | BindingFlags.Instance |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> BindingFlags.DeclaredOnly);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> foreach (PropertyInfo info &lt;span style="color:#00a">in&lt;/span> infos)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type infoType = info.PropertyType;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type nullableType = null;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (infoType.IsGenericType &amp;amp;&amp;amp; infoType.GetGenericTypeDefinition().Equals(&lt;span style="color:#0aa">typeof&lt;/span> (Nullable&amp;lt;&amp;gt;)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nullableType = ExtractTypeFromNullable(infoType);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (!info.CanWrite) &lt;span style="color:#00a">continue&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (DateTime)) || infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (DateTime&lt;span style="color:#f00;background-color:#faa">?&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, RandomDateTime(DateTime.Now, new DateTime(&lt;span style="color:#099">3000&lt;/span>, &lt;span style="color:#099">01&lt;/span>, &lt;span style="color:#099">01&lt;/span>)), null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (string)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, info.Name + &lt;span style="color:#a50">&amp;#34;_&amp;#34;&lt;/span> + RandomString(&lt;span style="color:#099">20&lt;/span>, &lt;span style="color:#0aa">false&lt;/span>), null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> ((infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (long)) || infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (double)) ||
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (int)) || infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (long)) ||
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (int))) &amp;amp;&amp;amp; !info.Name.ToLower().EndsWith(&lt;span style="color:#a50">&amp;#34;id&amp;#34;&lt;/span>) &amp;amp;&amp;amp;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> !info.Name.ToLower().Equals(&lt;span style="color:#a50">&amp;#34;pk&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, RandomNumber(&lt;span style="color:#099">0&lt;/span>, &lt;span style="color:#099">999999&lt;/span>), null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> ((infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (long&lt;span style="color:#f00;background-color:#faa">?&lt;/span>)) || infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (double&lt;span style="color:#f00;background-color:#faa">?&lt;/span>)) ||
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (int&lt;span style="color:#f00;background-color:#faa">?&lt;/span>)) || infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (long&lt;span style="color:#f00;background-color:#faa">?&lt;/span>)) ||
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (int&lt;span style="color:#f00;background-color:#faa">?&lt;/span>))) &amp;amp;&amp;amp; !info.Name.ToLower().EndsWith(&lt;span style="color:#a50">&amp;#34;id&amp;#34;&lt;/span>) &amp;amp;&amp;amp;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> !info.Name.ToLower().Equals(&lt;span style="color:#a50">&amp;#34;pk&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type genericType = info.PropertyType.GetGenericArguments()[&lt;span style="color:#099">0&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, Convert.ChangeType(RandomNumber(&lt;span style="color:#099">0&lt;/span>, &lt;span style="color:#099">999999&lt;/span>), genericType), null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (decimal)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, &lt;span style="color:#099">1&lt;/span>m, null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (bool)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, &lt;span style="color:#0aa">true&lt;/span>, null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (Guid)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, Guid.NewGuid(), null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (infoType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (Enum)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Array values = Enum.GetValues(infoType);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> List&amp;lt;object&amp;gt; list = values.Cast&amp;lt;object&amp;gt;().ToList();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> object val = list[new Random().Next(&lt;span style="color:#099">0&lt;/span>, list.Count)];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, val, null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (((infoType.BaseType != null) &amp;amp;&amp;amp; (infoType.BaseType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (Enum)))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Array values = Enum.GetValues(infoType);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> List&amp;lt;object&amp;gt; list = values.Cast&amp;lt;object&amp;gt;().ToList();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> object val = list[new Random().Next(&lt;span style="color:#099">0&lt;/span>, list.Count)];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, val, null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (nullableType != null)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (nullableType.BaseType.Equals(&lt;span style="color:#0aa">typeof&lt;/span> (Enum)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Array values = Enum.GetValues(nullableType);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> List&amp;lt;object&amp;gt; list = values.Cast&amp;lt;object&amp;gt;().ToList();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> object val = list[new Random().Next(&lt;span style="color:#099">0&lt;/span>, list.Count)];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> info.SetValue(item, val, null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span> &lt;span style="color:#00a">if&lt;/span> (infoType.IsArray)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(&lt;span style="color:#a50">&amp;#34;Object contains array of objects need to fill these&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MethodInfo sm = info.GetSetMethod(&lt;span style="color:#0aa">true&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (sm.ReturnType.IsArray)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> object arrayObject = sm.Invoke(item, null);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> foreach (object element &lt;span style="color:#00a">in&lt;/span> (Array) arrayObject)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> foreach (PropertyInfo arrayObjPinfo &lt;span style="color:#00a">in&lt;/span> element.GetType().GetProperties())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Console.WriteLine(arrayObjPinfo.Name + &lt;span style="color:#a50">&amp;#34;:&amp;#34;&lt;/span> +
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> arrayObjPinfo.GetGetMethod().Invoke(element, null));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (!fillBaseObjects)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">break&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> type = type.BaseType;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> item;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ///&amp;lt;summary&amp;gt;Indentify &lt;span style="color:#00a">and&lt;/span> extracting type from Nullable Type&amp;lt;/summary&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> Type ExtractTypeFromNullable(Type type)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (type.IsGenericType &amp;amp;&amp;amp; type.GetGenericTypeDefinition() == &lt;span style="color:#0aa">typeof&lt;/span> (Nullable&amp;lt;&amp;gt;))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> PropertyInfo valueProp = type.GetProperty(&lt;span style="color:#a50">&amp;#34;Value&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> valueProp.PropertyType;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> null;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> string RandomString(int size, bool lowerCase)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">var&lt;/span> randomString = new StringBuilder(size);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /* Ascii start position (&lt;span style="color:#099">65&lt;/span> = A / &lt;span style="color:#099">97&lt;/span> = a)*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> int start = lowerCase &lt;span style="color:#f00;background-color:#faa">?&lt;/span> &lt;span style="color:#099">97&lt;/span> : &lt;span style="color:#099">65&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /* Add random chars*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">for&lt;/span> (int i = &lt;span style="color:#099">0&lt;/span>; i &amp;lt; size; i++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> randomString.Append((char) ((&lt;span style="color:#099">26&lt;/span>*randomSeed.NextDouble()) + start));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> randomString.ToString();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> int RandomNumber(int minimal, int maximal)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> randomSeed.Next(minimal, maximal);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /* Returns a random boolean value*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> bool RandomBool()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> randomSeed.NextDouble() &amp;gt; &lt;span style="color:#099">0.5&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /* Returns a random color*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> public &lt;span style="color:#00a">static&lt;/span> DateTime RandomDateTime(DateTime &lt;span style="color:#0aa">min&lt;/span>, DateTime &lt;span style="color:#0aa">max&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">if&lt;/span> (&lt;span style="color:#0aa">max&lt;/span> &amp;lt;= &lt;span style="color:#0aa">min&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">const&lt;/span> string message = &lt;span style="color:#a50">&amp;#34;Max must be greater than min.&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> throw new ArgumentException(message);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> long minTicks = &lt;span style="color:#0aa">min&lt;/span>.Ticks;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> long maxTicks = &lt;span style="color:#0aa">max&lt;/span>.Ticks;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> double rn = ((Convert.ToDouble(maxTicks) - Convert.ToDouble(minTicks))*randomSeed.NextDouble()) +
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Convert.ToDouble(minTicks);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a">return&lt;/span> new DateTime(Convert.ToInt64(rn));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>