Dependency injection 如何注入EmailMessageService
我的服务注射有问题。我有一个iSetting服务。我正在测试注册我的应用程序和使用电子邮件确认 因此,在从IIdentialMessageService继承的EmailMessageService类中 我在为国际奥委会使用团结。我已经在unity config注册了ISettingService,如下所示Dependency injection 如何注入EmailMessageService,dependency-injection,asp.net-mvc-5,inversion-of-control,asp.net-identity,unity-container,Dependency Injection,Asp.net Mvc 5,Inversion Of Control,Asp.net Identity,Unity Container,我的服务注射有问题。我有一个iSetting服务。我正在测试注册我的应用程序和使用电子邮件确认 因此,在从IIdentialMessageService继承的EmailMessageService类中 我在为国际奥委会使用团结。我已经在unity config注册了ISettingService,如下所示 .RegisterType<ISettingService, SettingService>() EmailMessageService类在Startup.Auth时实例化
.RegisterType<ISettingService, SettingService>()
EmailMessageService类在Startup.Auth时实例化
var manager =
new ApplicationUserManager(
new ApplicationUserStore(context.Get<DataContext>()));
...
manager.EmailService = new EmailMessagingService();
在EmailMessageService中。好的,我不知道发生了什么,但通过更改UnityMVActivator的启动方法,如下面的固定方法
public static void Start()
{
var container = ContainerManager.GetConfiguredContainer();
UnityConfig.RegisterTypes(container);
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
try
{
//http://stackoverflow.com/questions/699852/how-to-find-all-the-classes-which-implement-a-given-interface
foreach (var assembly in assemblies)
{
var instances = from t in assembly.GetTypes()
where t.GetInterfaces().Contains(typeof(IDependencyRegister))
&& t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as IDependencyRegister;
foreach (var instance in instances.OrderBy(x => x.Order))
{
instance.Register(container);
}
}
}
catch (ReflectionTypeLoadException ex)
{
http://stackoverflow.com/questions/1091853/error-message-unable-to-load-one-or-more-of-the-requested-types-retrieve-the-l
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (Exception exSub in ex.LoaderExceptions)
{
sb.AppendLine(exSub.Message);
System.IO.FileNotFoundException exFileNotFound = exSub as System.IO.FileNotFoundException;
if (exFileNotFound != null)
{
if (!string.IsNullOrEmpty(exFileNotFound.FusionLog))
{
sb.AppendLine("Fusion Log:");
sb.AppendLine(exFileNotFound.FusionLog);
}
}
sb.AppendLine();
}
string errorMessage = sb.ToString();
throw new Exception(errorMessage, ex);
//Display or log the error based on your application.
}
// TODO: Uncomment if you want to use PerRequestLifetimeManager
// Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}
publicstaticvoidstart()
{
var container=ContainerManager.GetConfiguredContainer();
UnityConfig.RegisterTypes(容器);
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType().First());
FilterProviders.Providers.Add(新UnityFilterAttributeFilterProvider(容器));
SetResolver(新UnitedDependencyResolver(容器));
var assemblies=AppDomain.CurrentDomain.GetAssemblies();
尝试
{
//http://stackoverflow.com/questions/699852/how-to-find-all-the-classes-which-implement-a-given-interface
foreach(程序集中的变量程序集)
{
var instances=来自assembly.GetTypes()中的t
其中t.GetInterfaces()包含(typeof(IDependencyRegister))
&&t.GetConstructor(Type.EmptyTypes)!=null
选择Activator.CreateInstance(t)作为IDependencyRegister;
foreach(instances.OrderBy(x=>x.Order)中的var实例)
{
实例.寄存器(容器);
}
}
}
捕获(ReflectionTypeLoadException ex)
{
http://stackoverflow.com/questions/1091853/error-message-unable-to-load-one-or-more-of-the-requested-types-retrieve-the-l
System.Text.StringBuilder sb=新的System.Text.StringBuilder();
foreach(ex.LoaderExceptions中的异常exSub)
{
某人追加电话(exSub.Message);
System.IO.FileNotFoundException exFileNotFound=exSub作为System.IO.FileNotFoundException;
如果(exFileNotFound!=null)
{
如果(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
{
sb.AppendLine(“融合日志:”);
sb.AppendLine(exFileNotFound.FusionLog);
}
}
(某人);
}
字符串errorMessage=sb.ToString();
抛出新异常(errorMessage,ex);
//根据应用程序显示或记录错误。
}
//TODO:如果要使用PerRequestLifetimeManager,请取消注释
//Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}
设置服务
是私有的
,这意味着从任何合理组合引擎的角度来看,该属性都不存在。除此之外,我不清楚为什么不能使用构造函数注入。我公开了它,但我得到了同样的错误。如果我使用构造函数injectmanager.EmailService=newemailMessagingService()代码>我需要给这行指定参数。我真的不知道该怎么做。
var setting = SettingService.Query().Select().FirstOrDefault();
public static void Start()
{
var container = ContainerManager.GetConfiguredContainer();
UnityConfig.RegisterTypes(container);
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
try
{
//http://stackoverflow.com/questions/699852/how-to-find-all-the-classes-which-implement-a-given-interface
foreach (var assembly in assemblies)
{
var instances = from t in assembly.GetTypes()
where t.GetInterfaces().Contains(typeof(IDependencyRegister))
&& t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as IDependencyRegister;
foreach (var instance in instances.OrderBy(x => x.Order))
{
instance.Register(container);
}
}
}
catch (ReflectionTypeLoadException ex)
{
http://stackoverflow.com/questions/1091853/error-message-unable-to-load-one-or-more-of-the-requested-types-retrieve-the-l
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (Exception exSub in ex.LoaderExceptions)
{
sb.AppendLine(exSub.Message);
System.IO.FileNotFoundException exFileNotFound = exSub as System.IO.FileNotFoundException;
if (exFileNotFound != null)
{
if (!string.IsNullOrEmpty(exFileNotFound.FusionLog))
{
sb.AppendLine("Fusion Log:");
sb.AppendLine(exFileNotFound.FusionLog);
}
}
sb.AppendLine();
}
string errorMessage = sb.ToString();
throw new Exception(errorMessage, ex);
//Display or log the error based on your application.
}
// TODO: Uncomment if you want to use PerRequestLifetimeManager
// Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}