如题,我在.net core mvc中定义了仓储,但是怎么注入?按照网上方法注入提示失败.
仓储接口
public interface IRepository<T> where T : Entity {//todo}
仓储实现
public abstract class BaseRepository<T> : IRepository<T> where T : Entity {//todo}
entity实体
9 10 11 /// <summary> 12 /// 泛型实体基类 13 /// </summary> 14 /// <typeparam name="TPrimaryKey">主键类型</typeparam> 15 public abstract class Entity<TPrimaryKey> 16 { 17 /// <summary> 18 /// 主键 19 /// </summary> 20 public virtual TPrimaryKey Id { get; set; } 21 } 22 23 /// <summary> 24 /// 定义默认主键类型为int的实体基类 25 /// </summary> 26 public abstract class Entity : Entity<int> 27 { 28 }
startUp文件注入
1 public IServiceProvider ConfigureServices(IServiceCollection services) 2 { 3 services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>()); 4 services.AddMvc(); 5 services.AddDbContext<EfDbContext>(options=> { 6 options.UseMySql(Configuration.GetConnectionString("Connection")); 7 },ServiceLifetime.Scoped); 8 9 10 var builder = new ContainerBuilder(); 11 //找到所有Controller的类型 12 var assembly = this.GetType().GetTypeInfo().Assembly; 13 var manager = new ApplicationPartManager(); 14 manager.ApplicationParts.Add(new AssemblyPart(assembly)); 15 manager.FeatureProviders.Add(new ControllerFeatureProvider()); 16 var feature = new ControllerFeature(); 17 manager.PopulateFeature(feature); 18 //通过Autofac对Controller类型进行注册 19 builder.RegisterTypes(feature.Controllers.Select(ti => ti.AsType()).ToArray()).PropertiesAutowired(); 20 builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IRepository<>)).InstancePerDependency();//注册仓储泛型 21 22 builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork));//注册工作单元 23 builder.Populate(services); 24 return new AutofacServiceProvider(builder.Build()); 25 }
报错信息
//register
services.AddScoped(typeof(Repository<,>));
//get service
.GetService<Repository<TContext, TEntity>>();
autofac怎么写不太清楚。给你参考一下
如果使用 .net core 自带的依赖注入容器,可以轻松搞定
自带的依赖注入容器好像不能进行泛型注入吧,我试了怎么不行
@我的个去: 在 .NET Core 3.0 中,下面2种方式都可以注入泛型
方法1:
services.AddSingleton<IMemcachedClient<T>, MemcachedClient<T>>();
方法2:
services.AddSingleton(typeof(IMemcachedClient<>), typeof(MemcachedClient<>));
@dudu: 我试了 用的方法2不得行,报无法实例化,我用的是core 2.2
@dudu: 好的 谢谢
@我的个去: 如果还是不行,建议在博问中重新发一个提问
@dudu: 可以了 原来实现类不能用abstract ,谢谢哈
@我的个去: 哈哈,我也是这个问题
兄弟你好,我在.netcore2.2 mvc 中自动注册 autofac 服务,
在startup中执行以下代码,可以完成自动注册服务,
builder.RegisterGeneric(typeof(Service<>)).As(typeof(IService<>)).InstancePerDependency();
private readonly IService<User> _userService;
public HomeController(IService<User> userService)
{
_userService = userService;
}
在如果把泛型类改成多类型泛型就不行了。
builder.RegisterGeneric(typeof(Service<,>)).As(typeof(IService<,>)).InstancePerDependency();
我在控制器中构造函数注入访问引发异常。
private readonly IService<User, Guid> _userService;
public HomeController(IService<User, Guid> userService)
{
_userService = userService;
}
我的QQ号:42807167 期待您的回复。
我的不是抽象的怎么也不行,用的3.1版本
– 纯洁的逗比 3年前