Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Autofac解析继承类的依赖项_C#_Dependency Injection_Autofac - Fatal编程技术网

C# 使用Autofac解析继承类的依赖项

C# 使用Autofac解析继承类的依赖项,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,首先,让我提供一些示例代码: public abstract class BaseEntity { } public class MyEntity : BaseEntity { } public class MyCustomEntity : BaseEntity { } public interface IStore<TEntity> where TEntity : BaseEntity { } public class BaseStore<TEntity> : ISt

首先,让我提供一些示例代码:

public abstract class BaseEntity { }
public class MyEntity : BaseEntity { }
public class MyCustomEntity : BaseEntity { }

public interface IStore<TEntity> where TEntity : BaseEntity { }
public class BaseStore<TEntity> : IStore<TEntity> where TEntity : BaseEntity { }
public class MyCustomEntityStore : BaseStore<MyEntity> { }
我想将
BaseStore
的实例注入
IStore
MyCustomEntityStore
注入
IStore
。这在
MyCustomEntityStore
(它有一个从基存储派生的具体实现)中运行良好,但我不想创建空类只是为了继承
BaseStore
。我注册了如下组件:

builder.RegisterAssemblyTypes(Assembly.Load("Project.Data")).Where(t => t.Name.EndsWith("Store")).AsImplementedInterfaces().InstancePerRequest();
虽然这些实例可以代替这些接口,但Autofac无法解析
ISTOR


谢谢你的帮助

我设法解决了这个注册问题:

builder.RegisterGeneric(typeof(BaseStore<>))
       .As(typeof(IStore<>))
       .InstancePerRequest();
builder.RegisterAssemblyTypes(Assembly.Load("Project.Data"))
       .Where(t => t.Name.EndsWith("Store"))
       .AsImplementedInterfaces()
       .InstancePerRequest();
builder.RegisterGeneric(typeof(BaseStore))
.As(类型(历史记录))
.InstancePerRequest();
builder.RegisterAssemblyTypes(Assembly.Load(“Project.Data”))
.Where(t=>t.Name.EndsWith(“存储”))
.AsImplementedInterfaces()
.InstancePerRequest();
有人能证实这是正确的方法吗

builder.RegisterGeneric(typeof(BaseStore<>))
       .As(typeof(IStore<>))
       .InstancePerRequest();
builder.RegisterAssemblyTypes(Assembly.Load("Project.Data"))
       .Where(t => t.Name.EndsWith("Store"))
       .AsImplementedInterfaces()
       .InstancePerRequest();