Dependency injection 如何注入EmailMessageService

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时实例化

我的服务注射有问题。我有一个iSetting服务。我正在测试注册我的应用程序和使用电子邮件确认

因此,在从IIdentialMessageService继承的EmailMessageService类中

我在为国际奥委会使用团结。我已经在unity config注册了ISettingService,如下所示

.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));
}

设置服务
私有的
,这意味着从任何合理组合引擎的角度来看,该属性都不存在。除此之外,我不清楚为什么不能使用构造函数注入。我公开了它,但我得到了同样的错误。如果我使用构造函数inject
manager.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));
    }