![](/img/trans.png)
[英]Inject an IEnumerable of generic interface in Unity Dependency Injection c#
[英]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.