C# 动态注册泛型类型
我想使用Unity注册一个通用存储库类 这是我的通用类:C# 动态注册泛型类型,c#,unity-container,C#,Unity Container,我想使用Unity注册一个通用存储库类 这是我的通用类: public class Repository<TModel> : IRepository<TModel> where TModel : class, IModel } 有什么建议吗?Unity 3支持。使用“按约定注册”,您的示例可能如下所示: var currentsassembly=Assembly.LoadFrom(Assembly); IOC_Container.RegisterTypes(
public class Repository<TModel>
: IRepository<TModel> where TModel : class, IModel
}
有什么建议吗?Unity 3支持。使用“按约定注册”,您的示例可能如下所示:
var currentsassembly=Assembly.LoadFrom(Assembly);
IOC_Container.RegisterTypes(
currentAssembly.GetTypes()。其中(
t=>t.FullName.EndsWith(“服务”),
使用mappings.MatchingInterface,
WithName.Default);
上面将注册一个i存储库
接口到匹配的存储库
具体类型
这可以使注册多个类型时的工作更轻松,但对于您发布的特定存储库代码,您可能不需要该功能。Unity允许您注册打开的泛型类型,因此您可以只执行一次注册,而不必注册IRepository的所有组合:
IOC\u Container.RegisterType(
typeof(IRepository)、typeof(Repository));
解析IRepository
时,Unity将使用类型Employee解析存储库
IOC_Container.RegisterType(typeof(IRepository<Employee>), typeof(Repository<Employee>));
var currentAssembly = Assembly.LoadFrom(assembly);
var assemblyTypes = currentAssembly.GetTypes();
foreach (var assemblyType in assemblyTypes)
{
if (assemblyType.IsInterface)
{
continue;
}
if (assemblyType.FullName.EndsWith("Service"))
{
foreach (var requiredInterface in assemblyType.GetInterfaces())
{
if (requiredInterface.FullName.EndsWith("Service"))
{
var typeFrom = assemblyType.GetInterface(requiredInterface.Name);
var typeTo = assemblyType;
IOC_Container.RegisterType(typeFrom, typeTo);
}
}
}
}