6

rất mới đối với Cấu trúc-Bản đồ. cố gắng tìm ra cách nó hoạt động và làm thế nào tôi có thể hưởng lợi từ nó.Lỗi Sơ đồ Cấu trúc: Không có Trường hợp Mặc định nào được xác định cho PluginFamily

tôi đã nhận này cho đến nay ..

Global.asax.cs:

IContainer container = new Container(x => 
    { 
     x.For<IControllerActivator>().Use 
       <StructureMapControllerActivator>(); 
     x.For<IUserRepo>().Use<UserRepo>(); 
    }); 

DependencyResolver.SetResolver(new StructureMapDependencyResolver(container)); 

StructureMapControllerActivator:

public class StructureMapControllerActivator : IControllerActivator 
{ 
    private readonly IContainer _container; 

    public StructureMapControllerActivator(IContainer container) 
    { 
     this._container = container; 
    } 

    public IController Create(RequestContext requestContext, Type controllerType) 
    { 
     return _container.GetInstance(controllerType) as IController; 
    } 
} 

StructreMapDependencyResolver:

private readonly IContainer _container; 

    public StructureMapDependencyResolver(IContainer container) 
    { 
     this._container = container; 
    } 

    public object GetService(Type serviceType) 
    { 
     object instance = _container.TryGetInstance(serviceType); 
     if(instance == null && !serviceType.IsAbstract) 
     { 
      _container.Configure(c => c.AddType(serviceType,serviceType)); 
      instance = _container.TryGetInstance(serviceType); 
     } 
     return instance; 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return _container.GetAllInstances(serviceType).Cast<object>(); 
    } 
} 

AccountController của tôi:

public class AccountController : Controller 
{ 
    private readonly IUserRepo _userRepo; 

    private AccountController() 
    { 
     _userRepo = ObjectFactory.GetInstance<IUserRepo>(); 
    } 

    public ActionResult Login() 
    { 
     return View(); 
    } 
} 

Error Code & Mô tả:

StructureMap Exception Code: 202 No Default Instance defined for PluginFamily MBP_Blog.Controllers.AccountController MBP-Blog, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Tôi có một Tên Interface: IUserRepo và Tên kho lưu trữ: UserRepo

xin vui lòng giúp đỡ một Tôi cố gắng google nhưng dint tìm thấy bất kỳ giải pháp trong vòng 3 trang đầu tiên.

lỗi mới sau khi sử dụng @ đang Martin:

StructureMap Exception Code: 180 StructureMap cannot construct objects of Class MBP_Blog.Controllers.AccountController, MBP-Blog, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null because there is no public constructor found.

Trả lời

3

Đi ra StructureMapControllerActivator, tôi không nghĩ rằng bạn cần nó. Nếu bạn giữ nó, bạn cần phải thêm ánh xạ cho số AccountController của mình.

Ngoài ra, sử dụng điều khiển phun thay vào đó, nó sẽ làm cho kiểm tra đơn vị dễ dàng hơn:

public class AccountController : Controller 
{ 
    private readonly IUserRepo _userRepo; 

    public AccountController(IUserRepo userRepo) 
    { 
     _userRepo = userRepo; 
    } 

    public ActionResult Login() 
    { 
     return View(); 
    } 
} 

Ngoài ra một lần nữa, cho container của bạn, bạn có thể mặc định ánh xạ. Điều này sẽ tự động lập bản đồ IService-Service:

IContainer container = new Container(
      x => 
       { 
        x.Scan(scan => 
           { 
            scan.Assembly("MBP_Blog"); 
            scan.Assembly("MBP_Blog.Data"); 
            scan.WithDefaultConventions(); 
           }); 
       }); 
+0

@ Martin .. cảm ơn vì answer..i bạn cố gắng sử dụng method..but của bạn vẫn tôi đang nhận được lỗi. hãy xem lỗi cập nhật .. –

+0

SORRY !!! - Làm cho nhà xây dựng công khai – Martin

+0

cảm ơn ... bằng cách nào đó tôi đã nhận nó làm việc ... tôi không biết liệu nó là một tthanks thực hành tốt nhất cho sự giúp đỡ của bạn .. sử dụng nó hay không ... sẽ hỏi một câu hỏi về điều đó ... –

Các vấn đề liên quan