2011-12-24 39 views
0

所有人,使用MVC3代码时,我有一个问题是如下StructureMap异常代码:202

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 Excep重刑代码:202 没有默认实例PluginFamily System.Net.Mail.SmtpClient,系统,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089


我认为问题就出在这个定义:

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

我问你怎么写它?

回答

2

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

尝试添加该到您的注册:

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

这假定SmtpClient并不需要依赖于构造。如果是这样,你可能会得到一个错误,即它的一个依赖没有被默认实现注册。

或者你可以改变构造函数代码到这个(没有构造函数依赖):

private readonly SmtpClient _smtpClient = new SmtpClient(); 

public SmtpClientProxy() 
{ 
} 

不知道你正在尝试做的,很难确切回答。

+0

成功,谢谢你的回答 – xj7799911 2011-12-24 10:17:13