На самом деле вы можете попытаться применить псевдоним вместо наследования к новому типу.
using ActivityList=System.Collections.Generic.List<IActivity>;
//.... after some declarations
var activityList = new ActivityList();
Я читал о файле конфигурации Unity. Я знаю, что вы можете создать псевдоним, но я не уверен, как указать непатентованные значения
Кстати, в этой статье есть объяснение вариантов использования дженериков ;-)
http://dotnetslackers.com/articles/net/A-First-Look-at-Unity-2-0.aspx
Я надеюсь, что это поможет
EDIT :
После некоторого времени, потраченного на его использование, вот мой ответ:
Список Предположим, вы хотите использовать разрешение от «IList» до «List».
1 Сначала вам нужно подготовить файл конфигурации, в этом случае он использует подписанные ссылки на IList, а также List.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="StringListContract" type="System.Collections.Generic.IList`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<alias alias="ConcreteStringList" type="System.Collections.Generic.List`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<container>
<register type="StringListContract" mapTo="ConcreteStringList">
<lifetime type="ContainerControlledLifetimeManager" />
<constructor />
</register>
</container>
</unity>
</configuration>
2
Используйте контейнер для разрешения зависимости; -)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
namespace UnityTerminal
{
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.LoadConfiguration();
{
var concreteStringList = container.Resolve<System.Collections.Generic.IList<System.String>>();
concreteStringList.Add("Hello World");
}
{
var concreteStringList = container.Resolve<System.Collections.Generic.IList<System.String>>();
Console.WriteLine("{0}", concreteStringList[0]);
}
Console.ReadKey();
}
}
}
Этого должно быть достаточно, я надеюсь, что это работает ;-)
С наилучшими пожеланиями,
Herber