kri*_*isg 10 .net generics configuration inversion-of-control unity-container
我试图在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>
{
...
}
Run Code Online (Sandbox Code Playgroud)
我目前的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>
Run Code Online (Sandbox Code Playgroud)
根据注册泛型类型的文档,你周围使用泛型类型方括号,如果类型不是系统类型你提供完全限定的类型里面更多的方括号.我想,这就是我所做的.然而 - 没有工作.
编辑:来自MSDN站点的示例:
<register type="IDictionary[string, [MyApp.Interfaces.ILogger, MyApp]]"/>
Run Code Online (Sandbox Code Playgroud)
生成的错误是:
无法解析类型名称或别名IRepository.请检查配置文件并验证此类型名称.
Chr*_*res 19
MSDN没有错.我们特别添加了一些快捷方式解析规则,这样您就不必在大多数情况下输入所有的`和方括号.
我打了一个看起来和你一样的例子:
public interface IRepository<T> where T: class
{
}
public class GenericRepository<T> : IRepository<T> where T : class
{
}
public class BlogRepository : GenericRepository<Blog>
{
}
public class Blog
{
}
Run Code Online (Sandbox Code Playgroud)
我的XML配置如下所示:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<namespace name="UnityConfigExample"/>
<assembly name="UnityConfigExample"/>
<container>
<register type="IRepository[]" mapTo="GenericRepository[]" />
<register type="IRepository[Blog]" mapTo="BlogRepository" />
</container>
</unity>
Run Code Online (Sandbox Code Playgroud)
它只是有效.
您是否有机会尝试使用IRepository的别名而不是命名空间/程序集搜索?我使用别名也得到以下工作:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="IRepository" type="UnityConfigExample.IRepository`1, UnityConfigExample" />
<alias alias="GenericRepository" type="UnityConfigExample.GenericRepository`1, UnityConfigExample"/>
<alias alias="BlogRepository" type="UnityConfigExample.BlogRepository, UnityConfigExample"/>
<alias alias="Blog" type="UnityConfigExample.BlogRepository, UnityConfigExample"/>
<container>
<register type="IRepository[]" mapTo="GenericRepository[]" />
<register type="IRepository[Blog]" mapTo="BlogRepository" />
</container>
</unity>
Run Code Online (Sandbox Code Playgroud)
指定别名的类型时,必须使用CLR类型语法.在其他任何地方,您都可以使用通用的快捷语法.
| 归档时间: |
|
| 查看次数: |
14382 次 |
| 最近记录: |