标签: structuremap

StructureMap异常代码:202未定义默认实例

当我在SM中注册以下内容然后尝试创建实例时,我得到了异常 - 'StructureMap异常代码:202没有为PluginFamily定义默认实例......'

Scan(x =>
        {
            x.Assembly("MVCDemo");
            x.Assembly("MVCDemo.Infrastructure");
            x.Assembly("MVCDemo.Services");

            x.AddAllTypesOf(typeof (IRepository<>));
        });

        ForRequestedType<IRepository<Employee>>().TheDefault.Is.ConstructedBy(() => new EmployeeRepository());


 var tmp4 = ObjectFactory.GetInstance<IRepository<Employee>>();
Run Code Online (Sandbox Code Playgroud)

当我尝试获取IRepository的实例时会发生异常.

有谁知道我错过了什么?

干杯

奥利

structuremap registry dsl exception

2
推荐指数
1
解决办法
7533
查看次数

StructureMap处理容器

在我的应用程序中,每个租户都有自己的StructureMap容器​​.

在运行时,可以关闭或重新启动租户实例.我应该做什么整理(比如调用IContainer.Dispose)或者我应该让Garbage Collection做它的工作吗?

我们确实有许多实现IDisposable的单例实例.理想情况下,我们应该在处理容器之前调用Dispose.我知道这是在嵌套容器上自动完成的,但不确定标准容器?

谢谢,

structuremap

2
推荐指数
1
解决办法
1690
查看次数

如何设置StructureMap以使用带有Use <>的Singleton.对于<>语法

我正在使用带有MVC3的StructureMap我想将它设置为使用一些对象作为单例或给它们一个Per Request生命.我在那里看到的所有示例都是针对StructureMap的旧语法,因为当我尝试示例时,我看到它已被删除.

如何使用较新的使用<>进行此操作.对于<>语法?

c# structuremap inversion-of-control asp.net-mvc-3

2
推荐指数
1
解决办法
551
查看次数

我可以使用StructureMap向ASP.NET MVC控制器注入一些字符串(例如配置值)吗?

我正在使用structureMap作为ASP.NET MVC网站的IoC/DI.效果很好.

通常,我有我的控制器传递接口和structureMap +贪婪的构造函数==工作得很好.

例如.

public void FooController : Controller
{
    public FooController(IPewPew pewPew) { .. }
}
Run Code Online (Sandbox Code Playgroud)

等等..

但是......我的一个控制器(只有一个em)希望传入两个字符串.

例如..

public void FooController2 : Controller
{
    public FooController2(IPewPew pewPew, string aaa, string bbb) { .. }
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以用StructureMap做到这一点吗?有没有办法说,当列出字符串"aaa"时,请使用此值=>"hi!";

我真的不想将所有这些字符串放入具有接口的具体类中.

就像我想说的那样.

For<string>().WithName("aaa").Use<string>().WithValue("hi");
Run Code Online (Sandbox Code Playgroud)

干杯!

.net c# structuremap asp.net-mvc dependency-injection

2
推荐指数
1
解决办法
332
查看次数

使用StructureMap注入连接字符串不起作用

我对结构图仍然很新,所以我无法理解为什么这不起作用.我正在向存储库注入"连接字符串",并且我不断从结构图中收到以下错误:

StructureMap异常代码:205缺少所请求的实例属性"purchaseOrdersFilePath"for InstanceKey"a04b4f71-4171-4e9f-b98d-170fc9ee005f"

在旁注中,连接字符串是引号,因为我正在使用linq到xml,因此"连接字符串"实际上是文件的路径.我正在添加它,以防万一它可能与问题有关.

我的代码如下:

public class PurchaseOrderRepository : IPurchaseOrderRepository
{
    private readonly string PurchaseOrdersFilePath;

    public PurchaseOrderRepository(string purchaseOrdersFilePath)
    {
        if (string.IsNullOrWhiteSpace(purchaseOrdersFilePath)) throw new ArgumentNullException("purchaseOrdersFilePath");

        PurchaseOrdersFilePath = purchaseOrdersFilePath;
    }
 }
Run Code Online (Sandbox Code Playgroud)

在我的Global.asax文件中,我有以下配置语句:

private void RegisterControllerFactory()
{
    var ioc = new Container();

    var controllerFactory = new IocControllerFactory(ioc);
    ControllerBuilder.Current.SetControllerFactory(controllerFactory);

    ioc.Configure(r => r.Scan(x =>
    {
        x.AssemblyContainingType<HomeController>();
        x.AddAllTypesOf<IController>();
        x.Include(t => typeof(IController).IsAssignableFrom(t));
    }));

    ioc.Configure(r => r
        .ForConcreteType<PurchaseOrderRepository>()
        .Configure.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢你的帮助.

c# structuremap dependency-injection

2
推荐指数
1
解决办法
1596
查看次数

结构图nancy bootstrapper

我正在尝试使用structuremap bootstrapper启动带nancyfx https://github.com/NancyFx/Nancy.Bootstrappers.StructureMap

这是我的设置:

        protected override void ConfigureApplicationContainer(IContainer container)
    {

        container.Configure(x =>
        {
            x.ForSingletonOf<IRazorConfiguration>()
                .Use<DefaultRazorConfiguration>();

           x.ForSingletonOf<ISessionContainer>().Use<SessionContainer>();

           x.For<IRepository>().LifecycleIs(new HttpContextLifecycle()).Use<Repository>();

            x.Scan(scanner=>
            {
                scanner.TheCallingAssembly();
                scanner.AddAllTypesOf<IRepository>();

            });
        });
        base.ConfigureApplicationContainer(container);
    }

 public interface IRepository
{
   void Save();
}

   public class Repository:IRepository
{

   ISessionContainer _session;
   public Repository(ISessionContainer container)
   {
       _session = container;
   }

   public void Save()
   {

   }
}
Run Code Online (Sandbox Code Playgroud)

当我使用时var repo = ObjectFactory.GetInstance<IRepository>();,我得到这个例外:

StructureMap Exception Code:  202
No Default Instance defined for PluginFamily Infrastructure.IRepository, Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
Run Code Online (Sandbox Code Playgroud)

structuremap nancy

2
推荐指数
1
解决办法
1337
查看次数

如何在ASP.NET MVC5中配置structuremap.MVC 5以忽略框架接口/类实例

结构图方法,scan.WithDefaultConventions(); 在structuremap.MVC 5中假定使用约定IMyClassName,MyClassName作为依赖注入.如果您只创建了类,这没关系.

使用开箱即用的ASP.NET MVC 5应用程序,约定IMyClassName,MyClassName不会退出用户身份.如何配置structuremap以忽略ASP.NET Framework接口/类?

structuremap asp.net-mvc dependency-injection ioc-container structuremap3

2
推荐指数
1
解决办法
1125
查看次数

在构造函数中使用HttpContextBase时出现Structuremap错误

我正在.NET 4.0上构建一个ASP.NET MVC 2.0应用程序,并使用Structuremap 2.6.1 for IoC.我最近添加了一个ICookie和Cookie类,Cookie类将HttpContextBase作为构造函数参数(见下文),现在当我运行我的应用程序时,我收到此错误:没有为PluginFamily System.Web.HttpContextBase定义默认实例.

我之前在另一个具有相同堆栈的MVC应用程序中使用过此方法,但没有收到此错误.我错过了什么吗?如果我确实需要在我的structuremap配置文件中为HttoContextBase添加一些映射代码,我会使用什么?

帮助会很棒!!!

Cookie.cs

public class Cookie : ICookie
{
    private readonly HttpContextBase _httpContext;
    private static bool defaultHttpOnly = true;
    private static float defaultExpireDurationInDays = 1;
    private readonly ICryptographer _cryptographer;
    public Cookie(HttpContextBase httpContext, ICryptographer cryptographer)
    {
        Check.Argument.IsNotNull(httpContext, "httpContext");
        Check.Argument.IsNotNull(cryptographer, "cryptographer");
        _cryptographer = cryptographer;
        _httpContext = httpContext;
    }
    public static bool DefaultHttpOnly
    {
        [DebuggerStepThrough]
        get { return defaultHttpOnly; }

        [DebuggerStepThrough]
        set { defaultHttpOnly = value; }
    }

    public static float DefaultExpireDurationInDays
    {
        [DebuggerStepThrough]
        get …
Run Code Online (Sandbox Code Playgroud)

structuremap asp.net .net-4.0 asp.net-mvc-2

1
推荐指数
1
解决办法
2700
查看次数

StructureMap 2.6.1和ASP.NET MVC 2问题(来自DI的完整初学者)

在另一个线程上与@Aaronaught的对话中,我已经开始将我的应用程序转换为使用依赖注入和存储库模式,但我有点卡住了.我想我得到了模式的大部分内容和流程,但我坚持将StructMap实现到ASP.NET MVC 2.我读过的例子似乎已经过时了,我最新版本的Structure Map是我的使用(2.6.1).

我希望有人可以根据我粘贴的代码填补空白:

public static class Bootstrapper {
    public static void Configure() {
        ObjectFactory.Configure(x => {
            x.For<DataContext>().Add(new DataContext());
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以从我的控制器中获取DataContext的实例:

protected DataContext dc = ObjectFactory.GetInstance<DataContext>();
Run Code Online (Sandbox Code Playgroud)

我知道做错了,但我对如何避免它感到困惑.继续,这是控制器工厂:

public class StructureMapControllerFactory : DefaultControllerFactory {
    protected override IController GetControllerInstance(
        RequestContext rc,
        Type ct) {
        return (ObjectFactory.GetInstance(ct) as Controller);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白这究竟是什么,但它在示例中,所以我正在复制它.有人可以向我解释一下吗?

现在从我的理解,应该是注册表,如果我理解正确,全局化对象实例,如DataContext.那是对的吗?如果是这样,我该如何为StructureMap 2.6.1编写注册表?我看到的示例代码似乎已经过时,因为当我编写它时,我没有相同的选项(通过IntelliSense),所以我不确定如何编写它...

我将非常感谢您填写我所拥有的空白.

PS我对依赖注入和存储库的经验总共约8小时.

UPDATE /结论

阅读下面的@ Pure的优秀解释并观看他在子评论中引用的tekpub视频,我选择了Ninject而不是StructureMap.

我不知道Ninject是否比StructureMap更好,但从我的观点来看,开始并开始变得更容易.

structuremap asp.net-mvc dependency-injection repository-pattern

1
推荐指数
1
解决办法
622
查看次数

如何使用StructureMap将存储库类注入控制器?

在我正在处理的当前应用程序中,我有一个自定义的ControllerFactory类,它创建一个控制器并自动设置Elmah ErrorHandler.

public class BaseControllerFactory : DefaultControllerFactory
{
    public override IController CreateController( RequestContext requestContext, string controllerName ) {
        var controller = base.CreateController( requestContext, controllerName );
        var c = controller as Controller;
        if ( c != null ) {
            c.ActionInvoker = new ErrorHandlingActionInvoker( new HandleErrorWithElmahAttribute() );
        }
        return controller;
    }

    protected override IController GetControllerInstance( RequestContext requestContext, Type controllerType ) {
        try {
            if ( ( requestContext == null ) || ( controllerType == null ) )
                return base.GetControllerInstance( requestContext, controllerType ); …
Run Code Online (Sandbox Code Playgroud)

structuremap asp.net-mvc dependency-injection repository-pattern asp.net-mvc-3

1
推荐指数
1
解决办法
2109
查看次数