有这么个问题
C# code
public interface Repository<T> : IRepository<T> where T : class, new()
{
}
public class Repository<T> : IRepository<T> where T : class, new()
{
}
public class sendService:Service<go>,IsendService
{ public sendService(IRepository<go> repo) : base(repo)
{
}
}
配置内容
这个地方在配置文件里dependency 总是报错,告诉我这个类没法实例化,
<register type="IRepository[]" name="repository" mapTo="Repository[]"> <constructor>
<param name="f">
<dependency name="DbContextFactory">
</dependency>
</param>
</constructor>
</register>
<register type="IsendService" mapTo="sendService">
<constructor>
<param name="repo">
<dependency name="repository"></dependency>
</param>
</constructor>
</register>
配置到底要怎么办呢?
泛型得带参数啊。
比如 IRepository<> i = new Repository<>(); 这样能编译通过吗?
你的指定具体的泛型参数,例如:
public class GoRepository : Repository<go>{}
<register type="IRepository[go]" name="repository" mapTo="GoRepository">
额,你别说,编译还真就通过了,看了HANDS-ON LAB 有个开泛型和闭泛型的说法.....你研究一下
额...得了 解决了.....命名空间名字写错了......我捅咕一天了......晕 就你回答....分给你吧....另外,不带参数是可以的,UNITY会在已经注册的TYPE里边自己找的.
@Godot:
public interface IRepository<T> where T : class, new()
{
}
public class Repository<T> : IRepository<T> where T : class, new()
{
}
IRepository<> rep = new Repository<>(); // 这条语句不要说编译,智能提示就会告诉你语法错误。我不知道你咋编译通过的。
@程序猿.码农: 在配置文件里边写成开泛型就可以编译通过,UNITY自动装配了.不是在代码里实例化它....代码里肯定是用IOC负责实例对象的.
@Godot: 看来我们在“编译”这个词的理解上有分歧。配置文件是不参与编译的。
你的T是什么啊,是不是要传给 <register type="IRepository[]" name="repository" mapTo="Repository[]"> <constructor>这个里面去啊。<register type="IRepository[]" name="repository" mapTo="Repository[]"> <constructor>没看到这么写的[]
里面你加点东西在试试
给你个辛苦分