标签: swinject

使用Swinject时如何将参数传递给resolve方法?

我有一个测试项目,我试图将参数传递给Swinject项目中的resolve方法.

这是我的Swinject故事板扩展文件中包含的示例.

import Swinject

extension SwinjectStoryboard {

    class func setup() {

        let mainDm = MainDM()

        defaultContainer.register(MainDM.self) { _ in
            mainDm
        }

        defaultContainer.registerForStoryboard(ViewController.self) { r, c in
            c.dm = r.resolve(MainDM.self)
            c.container = defaultContainer

        }


        defaultContainer.register(GetMessageAction.self) { _, delegate in
            GetMessageAction(dm:mainDm, delegate: delegate)
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

在我的ViewController中,我正在尝试执行以下操作来解决GetMessageAction

@IBOutlet weak var myText: UILabel!

    var dm:MainDM!
    var container:Container!

    override func viewDidLoad() {
        super.viewDidLoad()

        NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: #selector(ViewController.getMessage), userInfo: nil, repeats: false)

    }

    func getMessage() {

        let action:GetMessageAction? = container.resolve(GetMessageAction.self, argument: self)! …
Run Code Online (Sandbox Code Playgroud)

dependency-injection ios swift swinject

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

Swinject - 对成员的模糊引用

我在我的应用程序中使用SwinjectSwift 3.当我尝试

let container = Container()
container.register(NetworkModeling.self) { _ in Network() }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说

Ambiguous reference to member 'register(_:name:factory:)'
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

dependency-injection swift swinject

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

为什么注册 Swinject 模型类时没有使用“.inObjectScope(.Container)”生成单例?

这个问题是针对对Swinject for Swift有丰富经验的人。

我将展示有问题的代码,我的问题在底部。

代码有点多,抱歉。

这是MySwinjectStoryboard.swift注册:

import Swinject

extension SwinjectStoryboard
{
    class func setup ()
    {
        defaultContainer.register( Stopwatch.self )
        {
            responder in Stopwatch( 
                signals: responder.resolve( SignalsService.self )! 
            )
        }

        defaultContainer.register( SignalsService.self ) 
        { 
            _ in SignalsService() 
        }.inObjectScope( .Container )

        defaultContainer.register( ImageService.self )
        {
            responder in ImageService(
                signals: responder.resolve( SignalsService.self )!
                , stopwatch: responder.resolve( Stopwatch.self )!
            )
        }.inObjectScope( .Container )

        defaultContainer.registerForStoryboard( StartUpViewController.self )
        {
            resolvable, viewController in
            viewController.stopwatch = resolvable.resolve( Stopwatch.self )!
            viewController.image = resolvable.resolve( ImageService.self )!
        }
    } …
Run Code Online (Sandbox Code Playgroud)

singleton ios swift swinject

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

崩溃:Container.swift第299行Container.resolve <A,B>(条目:ServiceEntryProtocol,调用者:(B)->任何)->A?

最近,我在尝试解析对象时开始崩溃。以下是崩溃日志。我可以看到,在 Container.swift 中的第 299 行, guard let currentObjectGraph = currentObjectGraph else { fatalError() }应用程序没有获取 currentObjectGraph 并且失败了。可能的原因是什么?在我的项目中,我有一个全局级汇编器,它添加来自不同框架的所有程序集。但是当我尝试解析一个对象时,它会崩溃。这是一个中间问题:-

#15. Crashed: com.apple.NSURLSession-work
0  libswiftCore.dylib             0x109a1b95c specialized _assertionFailure(_:_:file:line:flags:) + 97848
1  Swinject                       0x1096d4994 Container.resolve<A, B> (entry : ServiceEntryProtocol, invoker : (B) -> Any) -> A? (Container.swift:299)
2  Swinject                       0x1096d2e54 Container._resolve<A, B> (name : String?, option : ServiceKeyOption?, invoker : ((B) -> Any) -> Any) -> A? (Container.swift:192)
3  Swinject                       0x1096d582c Container.resolve<A> (A.Type, name : String?) -> A? (Container.swift:281)
4  Swinject                       0x1096d5918 ContainerSwinjectResolver (Container.swift) …
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift swinject xcode9

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

不带参数的 Swinject 服务类无法使用 Swift 3.0 在 .container 范围内注册:为什么?

我创建了一个超级简单的协议:

protocol IndependentProtocol {}
Run Code Online (Sandbox Code Playgroud)

和服务:

class IndependentService: IndependentProtocol {}
Run Code Online (Sandbox Code Playgroud)

以及以下Swinject注册工作:

defaultContainer.register( IndependentProtocol.self )
{ 
    _ in IndependentService()
}
Run Code Online (Sandbox Code Playgroud)

但以下一项则不然:

defaultContainer.register( IndependentProtocol.self )
{ 
    _ in IndependentService()
}.inObjectScope( .Container )
Run Code Online (Sandbox Code Playgroud)

给出的错误是:

Ambiguous reference to member 'register(_:name:factory:)'
Run Code Online (Sandbox Code Playgroud)

有趣的是,以下工作(即:带有参数的服务可以.container范围内注册):

    defaultContainer.register( AnotherProtocol.self )
    {
        r in AnotherService(
            signals: r.resolve( AnotherService.self )!
        )
    }.inObjectScope( .container )
Run Code Online (Sandbox Code Playgroud)

我读过这个类似的问题,这没有帮助:Swinject - 对成员的模糊引用

谢谢大家。

swift swinject

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