Я нашел решение в вопросе здесь.приведенный ниже код работает, как и ожидалось.
Есть ли какой-либо недостаток этого и создаст ли в будущем проблему?или любой лучший способ зарегистрировать все репозитории и сервисы, кроме этого?
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
// container.RegisterType<IAbcRepository, AbcRepository>();
// container.RegisterType<IAbcService, AbcService>();
container.RegisterTypes(AllClasses.FromAssemblies(typeof(Repository).Assembly), WithMappings.FromAllInterfaces, GetName, GetLifetimeManager);
container.RegisterTypes(AllClasses.FromAssemblies(typeof(Service).Assembly), WithMappings.FromAllInterfaces, GetName, GetLifetimeManager);
}
static bool IsNotificationHandler(Type type)
{
return type.GetInterfaces().Any(x => x.IsGenericType);
}
static LifetimeManager GetLifetimeManager(Type type)
{
return IsNotificationHandler(type) ? new ContainerControlledLifetimeManager() : null;
}
static string GetName(Type type)
{
return IsNotificationHandler(type) ? string.Format("HandlerFor" + type.Name) : string.Empty;
}
}
Насколько это безопасно использовать в большом приложении?