Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 在Unity Dependency Injection mvc中注册泛型类型T#_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

C# 在Unity Dependency Injection mvc中注册泛型类型T#

C# 在Unity Dependency Injection mvc中注册泛型类型T#,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,一、 am使用MVC5.2并使用UnityConfig执行依赖项注入。我已在global.asax.cs protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.Register

一、 am使用MVC5.2并使用UnityConfig执行依赖项注入。我已在global.asax.cs

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            UnityConfig.RegisterComponents();
        }
现在,我有一个T类型的泛型类,如下所示

public interface IGenericRepository<T> where T : class 
    {
}

public class GenericRepository<T> : IGenericRepository<T> where T : class 
    {
}
公共接口IGenericRepository,其中T:class
{
}
公共类GenericRepository:IGenericRepository,其中T:class
{
}
现在在unity配置文件中,我想添加一个泛型类

public static class UnityConfig
    {
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // e.g. container.RegisterType<ITestService, TestService>();            
            container.RegisterType<AccountController>(new InjectionConstructor());
            container.RegisterType<IHomeService, HomeService>();
            container.RegisterType<IGenericRepository<>,GenericRepository)();
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));
        }
    }
公共静态类UnityConfig
{
公共静态无效注册表组件()
{
var container=new UnityContainer();
//在此处向容器注册所有组件
//无需注册控制器
//例如container.RegisterType();
container.RegisterType

我尝试使用
typeof(IGenericRepository),typeof(genericpository)

这对我不管用。 我如何解决这个问题

我试着使用typeof(IGenericRepository), typeof(GenericRepository)这不适合我

下面是您应该如何向Unity注册泛型类型:

container.RegisterType(typeof(IGenericRepository<>), typeof(GenericRepository<>));
var obj = container.Resolve<IGenericRepository<object>>();
container.RegisterType(typeof(IGenericRepository)、typeof(genericpository));
var obj=container.Resolve();
公共接口IBaseRepository,其中T:class
{
IQueryable GetAll();
IQueryable FindByFunc(表达式谓词);
无效加法(T实体);
无效删除实体(T实体);
无效实体(T实体);
void SaveEntity();
}
公共类BaseRepository:IBaseRepository其中T:class其中context:DbContext,new()
{
私有上下文_entities=新上下文();
公共语境
{
获取{return\u entities;}
设置{u entities=value;}
}
公共虚拟IQueryable GetAll()
{
IQueryable查询=_entities.Set();
返回查询;
}
}
私有静态IUnityContainer BuildUnityContainer()
{
var container=new UnityContainer();
GlobalConfiguration.Configuration.DependencyResolver=新的Unity.WebApi.UnityDependencyResolver(容器);
业务组件(容器);
数据库组件(容器);
RegisterType(typeof(IBaseRepository)、typeof(BaseRepository));
返回容器;
}

错误消息说明了一切:您缺少类型参数。向回答者提供一些解释对处理范围有何想法?
    public interface IBaseRepository<T> where T : class
        {
            IQueryable<T> GetAll();
            IQueryable<T> FindByFunc(Expression<Func<T, bool>> predicate);
            void AddEntity(T entity);
            void DeleteEntity(T entity);
            void EditEntity(T entity);
            void SaveEntity();
        }

    public class BaseRepository<context, T> : IBaseRepository<T> where T : class where context : DbContext, new()
        {
            private context _entities = new context();
            public context Context
            {

                get { return _entities; }
                set { _entities = value; }
            }

            public virtual IQueryable<T> GetAll()
            {

                IQueryable<T> query = _entities.Set<T>();
                return query;
            }
    }

private static IUnityContainer BuildUnityContainer()
        {
            var container = new UnityContainer();
            GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
            BusinessComponent(container);
            DataBaseComponent(container);
            container.RegisterType(typeof(IBaseRepository<>), typeof(BaseRepository<,>));


            return container;
        }