繁体   English   中英

在Unity依赖注入MVC​​ C#中注册通用类型T

[英]Register Generic Type T in Unity Dependency Injection mvc C#

我使用的是mvc 5.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 
    {
}

现在,在统一配置文件中,我想添加一个通用类

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));
        }
    }

这给我一个错误,如下图所示 错误

我尝试使用typeof(IGenericRepository<>), typeof(GenericRepository<>)

这对我不起作用。 我该如何解决此问题。

我尝试使用typeof(IGenericRepository <>),typeof(GenericRepository <>)对我不起作用。

这是向Unity注册通用类型的方法:

container.RegisterType(typeof(IGenericRepository<>), typeof(GenericRepository<>));
var obj = container.Resolve<IGenericRepository<object>>();
    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;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM