<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Vahid Taslimi's Web log (وبلاگ وحید تسلیمی) - Unity</title><link>http://old.taslimi.me:80/Tags/Unity</link><description>Vahid Taslimi's Web log (وبلاگ وحید تسلیمی) - Unity</description><item><title>Using Unity with ASP.NET WEB API Controller</title><link>http://old.taslimi.me:80/using-unity-with-asp.net-web-api-controller</link><description>&lt;p&gt;Support for Ioc containers is backed into ASP.NET WEB API and uses the service locator pattern dependency resolver by default.&lt;/p&gt; &lt;p&gt;the default service locator implements the &lt;strong&gt;IDependencyResolver&lt;/strong&gt; interface. This interface has two methods. &lt;ul&gt; &lt;li&gt;&lt;strong&gt;GetService&lt;/strong&gt;: Creates one instance of a specified type.  &lt;li&gt;&lt;strong&gt;GetServices&lt;/strong&gt;: Create a collection of objects of a specified type.&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;in order to use Microsoft Unity framework with ASP.NET WEB API we need to map these to methods to Resolve and ResolveAll methods of Utity. to do so first add the following method to your global.asax.cs or your bootstrapper class&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;Public &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterDependencies(IUnityContainer container)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            GlobalConfiguration.Configuration.ServiceResolver.SetResolver(&lt;/pre&gt;&lt;pre class="alt"&gt;                t =&amp;gt;&lt;/pre&gt;&lt;pre&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;                    {&lt;/pre&gt;&lt;pre class="alt"&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; container.Resolve(t);&lt;/pre&gt;&lt;pre&gt;                    }&lt;/pre&gt;&lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (ResolutionFailedException)&lt;/pre&gt;&lt;pre&gt;                    {&lt;/pre&gt;&lt;pre class="alt"&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;                    }&lt;/pre&gt;&lt;pre class="alt"&gt;                },&lt;/pre&gt;&lt;pre&gt;                t =&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                    {&lt;/pre&gt;&lt;pre&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; container.ResolveAll(t);&lt;/pre&gt;&lt;pre class="alt"&gt;                    }&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (ResolutionFailedException)&lt;/pre&gt;&lt;pre class="alt"&gt;                    {&lt;/pre&gt;&lt;pre&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre class="alt"&gt;                    }&lt;/pre&gt;&lt;pre&gt;                });&lt;/pre&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;


&lt;p&gt;this is the method which maps the GetService and GetServices methods to Resolve and ResolveAll methods.&lt;/p&gt;
&lt;p&gt;the next and final step is to plug in this method to the framework. to do so you just need to call this method from the method in which you construct your unity container. in my case I create a separate method to take care of this:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IUnityContainer BuildUnityContainer()&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            var container = &lt;span class="kwrd"&gt;new&lt;/span&gt; UnityContainer();&lt;/pre&gt;&lt;pre&gt;            RegisterMappers(container);&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;RegisterDependencies(container);&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;            container.RegisterControllers();&lt;/pre&gt;&lt;pre class="alt"&gt;            DependencyResolver.SetResolver(&lt;span class="kwrd"&gt;new&lt;/span&gt; UnityDependencyResolver(container));&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; container;&lt;/pre&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;and you are done. you should be able to use your Ioc container with ASP.NET WEB API now.&lt;/p&gt;</description><pubDate>Sun, 15 Apr 2012 00:39:00 GMT</pubDate><guid isPermaLink="true">http://old.taslimi.me:80/using-unity-with-asp.net-web-api-controller</guid></item></channel></rss>