StructureMap 异常代码:202

发布于 2024-12-23 02:42:45 字数 4244 浏览 2 评论 0原文

大家好,我在使用MVC3时遇到问题代码如下

 public SystemController(IRepository repository)
            :this
        (
            repository,
            new AspNetMembershipProviderWrapper(System.Web.Security.Membership.Provider),
                new AspNetMembershipProviderWrapper(System.Web.Security.Membership.Provider),
                new AspNetRoleProviderWrapper(Roles.Provider),
            new SmtpClientProxy(new SmtpClient(Utils.Setting.EmailServer,
                                               int.Parse(Utils.Setting.EmailPort))
                                    {
                                        EnableSsl = true,
                                        UseDefaultCredentials = true,
                                        Credentials = new NetworkCredential(Utils.Setting.EmailAccount,
                                                                            Utils.Setting.EmailPassword),
                                        DeliveryMethod = SmtpDeliveryMethod.Network
                                    })
       ){}



        public SystemController(IRepository repository,
            IUserService userService,
            IPasswordService passwordService,
            IRolesService rolesService,
            ISmtpClient smtpClient)
            : base(repository)
        {
            _userService = userService;
            _passwordService = passwordService;
            _rolesService = rolesService;
            _smtpClient = smtpClient;
        }

public class SmtpClientProxy : ISmtpClient
    {
        private readonly SmtpClient _smtpClient;

        public SmtpClientProxy(SmtpClient smtpClient)
        {
            _smtpClient = smtpClient;
        }

        #region ISmtpClient Members

        public void Send(MailMessage mailMessage)
        {
            _smtpClient.Send(mailMessage);
        }

        #endregion
    }

 ObjectFactory.Initialize(x =>
                                 {
                                     x.Scan(scanner =>
                                                {
                                                    scanner.TheCallingAssembly();
                                                    scanner.WithDefaultConventions();
                                                });
                                     x.For<ISessionFactory>()
                                         .Singleton()
                                         .Use(GetSessionFactory());
                                     x.For<ISession>()
                                         .HybridHttpOrThreadLocalScoped()
                                         .Use(y => y.GetInstance<ISessionFactory>().OpenSession());
                                     x.For<IUserService>()
                                         .Use<AspNetMembershipProviderWrapper>();
                                     x.For<IPasswordService>()
                                         .Use<AspNetMembershipProviderWrapper>();
                                     x.For<IPasswordService>()
                                         .Use<AspNetMembershipProviderWrapper>();
                                     x.For<IRolesService>()
                                         .Use<AspNetRoleProviderWrapper>();
                                     x.For<ISmtpClient>()
                                         .Use<SmtpClientProxy>().Ctor<SmtpClient>();
                                     x.For<MembershipProvider>()
                                         .Use(System.Web.Security.Membership.Provider);
                                     x.For<RoleProvider>()
                                       .Use(Roles.Provider);
                                 });

错误信息:

StructureMap异常代码:202 No Default Instance Defined for PluginFamily System.Net.Mail.SmtpClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089


我想问题就出在这里:

x.For <ISmtpClient> ()
. Use <SmtpClientProxy> (). Ctor <SmtpClient> ();

请问你怎么写呢?

everyone, I have problems when using MVC3 code is as follows

 public SystemController(IRepository repository)
            :this
        (
            repository,
            new AspNetMembershipProviderWrapper(System.Web.Security.Membership.Provider),
                new AspNetMembershipProviderWrapper(System.Web.Security.Membership.Provider),
                new AspNetRoleProviderWrapper(Roles.Provider),
            new SmtpClientProxy(new SmtpClient(Utils.Setting.EmailServer,
                                               int.Parse(Utils.Setting.EmailPort))
                                    {
                                        EnableSsl = true,
                                        UseDefaultCredentials = true,
                                        Credentials = new NetworkCredential(Utils.Setting.EmailAccount,
                                                                            Utils.Setting.EmailPassword),
                                        DeliveryMethod = SmtpDeliveryMethod.Network
                                    })
       ){}



        public SystemController(IRepository repository,
            IUserService userService,
            IPasswordService passwordService,
            IRolesService rolesService,
            ISmtpClient smtpClient)
            : base(repository)
        {
            _userService = userService;
            _passwordService = passwordService;
            _rolesService = rolesService;
            _smtpClient = smtpClient;
        }

public class SmtpClientProxy : ISmtpClient
    {
        private readonly SmtpClient _smtpClient;

        public SmtpClientProxy(SmtpClient smtpClient)
        {
            _smtpClient = smtpClient;
        }

        #region ISmtpClient Members

        public void Send(MailMessage mailMessage)
        {
            _smtpClient.Send(mailMessage);
        }

        #endregion
    }

 ObjectFactory.Initialize(x =>
                                 {
                                     x.Scan(scanner =>
                                                {
                                                    scanner.TheCallingAssembly();
                                                    scanner.WithDefaultConventions();
                                                });
                                     x.For<ISessionFactory>()
                                         .Singleton()
                                         .Use(GetSessionFactory());
                                     x.For<ISession>()
                                         .HybridHttpOrThreadLocalScoped()
                                         .Use(y => y.GetInstance<ISessionFactory>().OpenSession());
                                     x.For<IUserService>()
                                         .Use<AspNetMembershipProviderWrapper>();
                                     x.For<IPasswordService>()
                                         .Use<AspNetMembershipProviderWrapper>();
                                     x.For<IPasswordService>()
                                         .Use<AspNetMembershipProviderWrapper>();
                                     x.For<IRolesService>()
                                         .Use<AspNetRoleProviderWrapper>();
                                     x.For<ISmtpClient>()
                                         .Use<SmtpClientProxy>().Ctor<SmtpClient>();
                                     x.For<MembershipProvider>()
                                         .Use(System.Web.Security.Membership.Provider);
                                     x.For<RoleProvider>()
                                       .Use(Roles.Provider);
                                 });

Error info:

StructureMap Exception Code: 202
No Default Instance defined for PluginFamily System.Net.Mail.SmtpClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089


I think the problem lies in this:

x.For <ISmtpClient> ()
. Use <SmtpClientProxy> (). Ctor <SmtpClient> ();

I ask you how to write it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁人与我共长歌 2024-12-30 02:42:45

您的 SmtpClientProxy 类在其构造函数中需要一个 SmtpClient 类。您没有为 SmtpClient 注册任何内容。

尝试将其添加到您的注册中:

x.For<SmtpClient>().Use<SmtpClient>(); 

这假设 SmtpClient 在其构造函数中不采用依赖项。如果确实如此,您可能会收到一个错误,表明其依赖项之一未在默认实现中注册。

或者,您可以将构造函数代码更改为此(无构造函数依赖性):

private readonly SmtpClient _smtpClient = new SmtpClient();  

public SmtpClientProxy()  
{  
}  

如果不知道您要做什么,则很难明确回答。

Your SmtpClientProxy class requires an SmtpClient class in its constructor. You don't have anything registered for SmtpClient.

Try adding this to your registration:

x.For<SmtpClient>().Use<SmtpClient>(); 

This assumes that SmtpClient does not take dependencies in its constructor. If it does you will likely get an error that one of its dependencies are not registered with a default implementation.

Alternatively you could change the constructor code to this (no constructor dependency):

private readonly SmtpClient _smtpClient = new SmtpClient();  

public SmtpClientProxy()  
{  
}  

Without knowing what you are trying to do, it's hard to answer definitively.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文