Я пытаюсь зарегистрировать универсальный тип в конфигурационном файле для Unity 2.0, но, похоже, не могу сделать это правильно. Я имел в виду документацию MS здесь: http://msdn.microsoft.com/en-us/library/ff660933%28v=PandP.20%29.aspx#_Generic_Types
Код выглядит так:
public interface IRepository<T> where T : class
{
...
}
public class GenericRepository<T> : IRepository<T> where T : class
{
...
}
public class BlogRepository : GenericRepository<BlogRepository>
{
...
}
Конфигурация XML, которую я сейчас имею, выглядит следующим образом:
<unity>
<!-- Aliases -->
<alias alias="BlogIRepository"
type="X.Services.Interfaces.IRepository[[X.Domain.Entities.Blog, X.Domain]], X.Services"/>
<alias alias="BlogRepository"
type="X.Repositories.BlogRepository, X.Repositories"/>
<!-- Type registration -->
<container name="development">
<!-- Common connection string value -->
<instance name="Conn" type="System.String" value="blahblahblah"/>
<register type="BlogIRepository" mapTo="BlogRepository">
<constructor>
<param name="connectionString" type="System.String" dependencyName="Conn"/>
</constructor>
</register>
</container>
</unity>
В соответствии с документацией для регистрации универсальных типов вы используете квадратные скобки вокруг универсального типа (типов), и если тип не является системным типом, вы предоставляете полностью определенный тип внутри дополнительных квадратных скобок. Что я и сделал, я думаю. Пока что - без работы.
РЕДАКТИРОВАТЬ : Пример с сайта MSDN:
<register type="IDictionary[string, [MyApp.Interfaces.ILogger, MyApp]]"/>
Произошла ошибка:
Не удалось разрешить имя типа или псевдоним IRepository. Пожалуйста, проверьте файл конфигурации и проверьте имя этого типа.