簡體   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