天天看點

Unity TIP4: 帶泛型參數的接口注入(interface,generic)

一:第一類需求

接口和類定義如下:

<code>public interface ISample&lt;</code><code>T</code><code>&gt;</code>

<code>{}</code>

<code>public class Sample : ISample&lt;</code><code>SomeClass2</code><code>&gt;</code>

<code>public class SomeClass2{}</code>

要求用Unity注入。

1:運作時注入

如果是運作時注入,可如下編碼:

<code>using (IUnityContainer container = new UnityContainer())</code>

<code>{</code>

<code>    </code><code>ConfigurationManager.GetSection("unity");</code>

<code>    </code><code>UnityConfigurationSection.CurrentSection.Configure(container, "containerOne");</code>

<code>    </code><code>container.RegisterType&lt;</code><code>ISample</code><code>&lt;SomeClass2&gt;, Sample&gt;();</code>

<code>    </code><code>var re = container.Resolve&lt;</code><code>ISample</code><code>&lt;SomeClass2&gt;&gt;();</code>

<code>}</code>

2:配置檔案配置注入

如果是在配置檔案中配置,配置檔案如下:

<code>  </code><code>&lt;</code><code>alias</code> <code>alias="ISample`1" type="ISample`1" /&gt;</code>

<code>  </code><code>&lt;</code><code>alias</code> <code>alias="Sample" type="Sample" /&gt;</code>

<code>  </code><code>&lt;</code><code>container</code> <code>name="containerOne"&gt;</code>

<code>    </code><code>&lt;</code><code>register</code> <code>type="ISample`1" name="Sample" mapTo="Sample" /&gt;</code>

<code>  </code><code>&lt;/</code><code>container</code><code>&gt;</code>

<code>&lt;/</code><code>unity</code><code>&gt;</code>

編碼如下:

<code>    </code><code>var re = container.Resolve&lt;</code><code>ISample</code><code>&lt;SomeClass2&gt;&gt;("Sample");</code>

二:第二類需求

<code>public class Sample&lt;</code><code>T</code><code>&gt; : ISample&lt;</code><code>T</code><code>&gt;</code>

<code>{ }</code>

<code>    </code><code>container.RegisterType&lt;</code><code>ISample</code><code>&lt;SomeClass2&gt;, Sample&lt;</code><code>SomeClass2</code><code>&gt;&gt;();</code>

<code>  </code><code>&lt;</code><code>alias</code> <code>alias="Sample`1" type="Sample`1" /&gt;</code>

<code>    </code><code>&lt;</code><code>register</code> <code>type="ISample`1" name="Sample" mapTo="Sample`1" /&gt;</code>

三:總結

可以看到,如果是運作時注入,那麼Resolve方法中,必須指定泛型的類型。

如果是在配置檔案中,為了表明這是個帶泛型參數的接口或者類,則需要為其指定字尾“`”。

本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/archive/2011/12/15/2289062.html,如需轉載請自行聯系原作者

繼續閱讀